|
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 ушел.
Соединение с сервером было потеряно во время запроса.
Произошла неизвестная ошибка.