Spec-Zone .ru
спецификации, руководства, описания, API
|
MYSQL_RES *mysql_use_result(MYSQL *mysql)
После вызова mysql_query()
или mysql_real_query()
,
следует вызвать mysql_store_result()
или mysql_use_result()
для каждого оператора, который успешно производит набор
результатов (SELECT
,
SHOW
,
DESCRIBE
, EXPLAIN
, CHECK
TABLE
, и т.д). Следует также вызвать mysql_free_result()
после того, как Вы делаетесь с набором результатов.
mysql_use_result()
инициирует извлечение набора результатов, но фактически не
читает набор результатов в клиент как mysql_store_result()
делает. Вместо этого каждая строка должна быть получена индивидуально, делая звонки mysql_fetch_row()
. Это читает результат запроса непосредственно от сервера,
не храня это во временной таблице или локальном буфере, который несколько быстрее и использует намного меньше
памяти чем mysql_store_result()
.
Клиент выделяет память только для текущей строки и коммуникационного буфера, который может расти к max_allowed_packet
байты.
С другой стороны недопустимо использовать mysql_use_result()
если Вы делаете большую обработку для каждой строки на стороне клиента, или если вывод отправляется экрану, на
котором пользователь может тип a ^S
(остановите прокрутку). Это связывает сервер, и
препятствуйте тому, чтобы другие потоки обновили любые таблицы, от которых выбираются данные.
При использовании mysql_use_result()
,
следует выполниться mysql_fetch_row()
до a NULL
значение возвращается, иначе, невыбранные строки возвращаются как часть
набора результатов для Вашего следующего запроса. API C дает ошибку 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()
вызывается.
A MYSQL_RES
структура результата. NULL
если ошибка
произошла.
mysql_use_result()
сбросы mysql_error()
и mysql_errno()
если это успешно выполняется.
Команды выполнялись в неподходящем порядке.
Из памяти.
Сервер MySQL ушел.
Соединение с сервером было потеряно во время запроса.
Произошла неизвестная ошибка.