MYSQL_RES *
mysql_use_result(MYSQL *mysql)
调用
mysql_real_query()
or
之后mysql_query()
,您必须
为每个成功生成结果集的语句调用 or (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()
如果您在客户端对每一行进行大量处理,或者如果将输出发送到用户可以键入^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_use_result()
重置
mysql_error()
,
mysql_errno()
如果成功。
-
命令的执行顺序不正确。
-
记不清。
-
MySQL 服务器已经消失。
-
查询期间与服务器的连接丢失。
-
出现未知错误。