Documentation Home

5.4.79 mysql_use_result()

MYSQL_RES *
mysql_use_result(MYSQL *mysql)

描述

调用 mysql_real_query()or 之后mysql_query(),您必须 为每个成功生成结果集的语句调用 or (mysql_store_result(), , , , 等等 )。您还必须在完成结果集后 调用 。mysql_use_result()SELECTSHOWDESCRIBEEXPLAINCHECK TABLEmysql_free_result()

mysql_use_result()启动结果集检索,但并不像实际那样将结果集读入客户端 mysql_store_result()。相反,必须通过调用 来单独检索每一行mysql_fetch_row()。这直接从服务器读取查询结果,而不将其存储在临时表或本地缓冲区中,这比 mysql_store_result(). 客户端仅为当前行分配内存,并分配一个可能增长到 max_allowed_packet字节的通信缓冲区。

另一方面, mysql_use_result()如果您在客户端对每一行进行大量处理,或者如果将输出发送到用户可以键入^S(停止滚动)的屏幕,则不应使用锁定读取。这会占用服务器并防止其他线程更新从中获取数据的任何表。

使用 时mysql_use_result(),您必须执行 mysql_fetch_row()直到 NULL返回一个值,否则,未提取的行将作为下一个查询的结果集的一部分返回。Commands out of sync; you can't run this command now如果您忘记这样做 ,C API 会给出错误!

您不得使用 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()如果成功。