5.4.79 mysql_use_result()
MYSQL_RES *
mysql_use_result(MYSQL *mysql)
Описание
После вызова mysql_real_query() или mysql_query(), вы должны вызвать mysql_store_result() или mysql_use_result() для каждого оператора, который успешно возвращает набор результатов (, , , , , и так далее). Вы также должны вызвать mysql_free_result() после завершения работы с набором результатов.
mysql_use_result() инициирует получение набора результатов, но не считывает сам набор результатов на клиент как mysql_store_result(). Вместо этого, каждая строка должна извлекаться индивидуально с помощью вызовов mysql_fetch_row(). Это считывает результат запроса непосредственно с сервера без хранения его во временной таблице или локальном буфере, что немного быстрее и использует гораздо меньше памяти, чем mysql_store_result(). Клиент выделяет память только для текущей строки и буфера связи, который может увеличиваться до байтов.
С другой стороны, вы не должны использовать mysql_use_result() для блокировок чтения, если вы выполняете много обработки для каждой строки на стороне клиента или если вывод отправляется на экран, на котором пользователь может нажать ^S (остановить прокрутку). Это связывает сервер и препятствует обновлению других потоков любых таблиц, из которых извлекаются данные.
При использовании mysql_use_result(), вы должны выполнять mysql_fetch_row() до тех пор, пока не вернётся значение NULL, в противном случае не извлечённые строки возвращаются как часть набора результатов для вашего следующего запроса. 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(), если успешно выполняется.
-
Команды были выполнены в неправильном порядке.
-
Недостаточно памяти.
-
Сервер MySQL недоступен.
-
Соединение с сервером было потеряно во время выполнения запроса.
-
Произошла неизвестная ошибка.
© 2025 Oracle
Licensed under the GPLv2 License.