文档主页
MySQL 9.0 C API 开发者指南
下载本手册
PDF (US Ltr) - 1.4Mb
PDF (A4) - 1.4Mb


5.4.86 mysql_use_result()

MYSQL_RES *
mysql_use_result(MYSQL *mysql)

说明

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

mysql_use_result() 初始化结果集检索,但实际上并不像 mysql_store_result() 那样将结果集读取到客户端。相反,必须通过调用 mysql_fetch_row() 单独检索每一行。这会直接从服务器读取查询结果,而无需将其存储在临时表或本地缓冲区中,这比 mysql_store_result() 快一些,并且使用的内存少得多。客户端只为当前行和一个通信缓冲区分配内存,该缓冲区最多可以增长到 max_allowed_packet 字节。

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

使用 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()

返回值

一个 MYSQL_RES 结果结构。如果发生错误,则返回 NULL

错误

如果 mysql_use_result() 成功,它会重置 mysql_error()mysql_errno()