23.8.7.72 mysql_use_result()
MYSQL_RES *mysql_use_result(MYSQL *mysql)
설명
mysql_query()
또는 mysql_real_query()
를 호출 한 뒤, 결과 세트를 정상적으로 생성하는 모든 문 ( SELECT
, SHOW
, DESCRIBE
, EXPLAIN
, CHECK TABLE
등)에 대해 mysql_store_result()
또는 mysql_use_result()
를 호출 할 필요 수 있습니다. 결과 세트의 처리를 완료 한 후 mysql_free_result()
도 호출 할 필요가 있습니다.
mysql_use_result()
는 결과 집합을 검색을 시작하지만 mysql_store_result()
처럼 실제로 결과 세트를 클라이언트에로드하지 않습니다. 대신 mysql_fetch_row()
를 호출함으로써 각 행을 별도로 취득해야합니다. 이것은 쿼리의 결과를 임시 테이블이나 지역 버퍼에 저장하지 않고 서버에서 직접 읽습니다. 이는 mysql_store_result()
보다 다소 빠르고, 사용하는 메모리가 훨씬 적습니다. 클라이언트는 현재 행과 max_allowed_packet
바이트까지 확장 할 수있는 통신 버퍼에만 메모리를 할당합니다.
한편, 클라이언트 측에서 각 행에 대해 대량의 처리를 할 경우 또는 사용자가 ^S
(스크롤 정지)를 입력 할 수있는 화면에 출력이 전송되는 경우는 mysql_use_result()
를 사용하지 마십시오. 이것은 서버를 구속하고 다른 스레드가 데이터 가져 오기 원본 테이블을 업데이트하는 것을 방해합니다.
mysql_use_result()
를 사용하는 경우는 NULL
값이 반환 될 때까지 mysql_fetch_row()
를 실행해야하며 그렇지 않으면 다음 쿼리 결과 집합의 일부로 페치되지 않은 행이 반환됩니다. 이 수행을 잊어 버리면 C API에 의해 오류 「
가 생성됩니다. Commands out of
sync; you can't run this command now
」
mysql_data_seek()
, mysql_row_seek()
, mysql_row_tell()
, mysql_num_rows()
또는 mysql_affected_rows()
을 mysql_use_result()
에서 반환 된 결과와 함께 사용할 수 없습니다. 또한 mysql_use_result()
이 끝날 때까지 다른 쿼리를 발행 할 수 없습니다. (그러나 모든 행을 반입 한 후, mysql_num_rows()
는 페치 된 행 수를 정확하게 반환합니다.)
결과 세트의 처리를 완료 한 후 mysql_free_result()
를 호출 할 필요가 있습니다.
libmysqld
임베디드 서버를 사용하는 경우, mysql_free_result()
가 호출 될 때까지 검색되는 각 행에 따라 메모리 사용량이 점차 증가하는 메모리의 장점이 본질적으로 손실됩니다.
반환 값
MYSQL_RES
결과 구조. 오류가 발생한 경우 NULL
.
오류
mysql_use_result()
는 성공하면 mysql_error()
와 mysql_errno()
을 재설정합니다.
CR_COMMANDS_OUT_OF_SYNC
명령이 잘못된 순서로 실행되었습니다.
CR_OUT_OF_MEMORY
메모리 부족.
CR_SERVER_GONE_ERROR
MySQL 서버가 존재하지 않습니다.
CR_SERVER_LOST
서버에 대한 연결이 쿼리 중에 손실되었습니다.
CR_UNKNOWN_ERROR
알 수없는 오류가 발생했습니다.