Spec-Zone .ru
спецификации, руководства, описания, API

21.8.7.72. mysql_use_result()

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() если это успешно выполняется.