MYSQL_RES *
mysql_store_result(MYSQL *mysql)
mysql_store_result()
是一个同步函数。其异步对应函数为 mysql_store_result_nonblocking()
,供需要与服务器进行异步通信的应用程序使用。参见 第 7 章 C API 异步接口。
调用 mysql_real_query()
或 mysql_query()
后,必须为每个成功生成结果集的语句(SELECT
、SHOW
、DESCRIBE
、EXPLAIN
、CHECK TABLE
等)调用 mysql_store_result()
或 mysql_use_result()
。在使用完结果集后,还必须调用 mysql_free_result()
。
对于其他语句,不需要调用 mysql_store_result()
或 mysql_use_result()
,但在所有情况下调用 mysql_store_result()
不会造成任何危害或明显的性能下降。可以通过检查 mysql_store_result()
是否返回非零值来检测语句是否具有结果集(稍后将详细介绍)。
如果启用了多语句支持,则应使用调用 mysql_next_result()
来确定是否存在更多结果的循环来检索对 mysql_real_query()
或 mysql_query()
的调用的结果。有关示例,请参见 第 3.6.3 节 “多语句执行支持”。
要确定语句是否返回结果集,请调用 mysql_field_count()
。参见 第 5.4.23 节 “mysql_field_count()”。
mysql_store_result()
将查询的整个结果读取到客户端,分配一个 MYSQL_RES
结构,并将结果放入该结构中。
如果语句没有返回结果集(例如,如果它是一个 INSERT
语句),或者发生错误并且读取结果集失败,则 mysql_store_result()
返回 NULL
。
如果没有返回行,则返回一个空的结果集。(空结果集与作为返回值的空指针不同。)
调用 mysql_store_result()
并获得一个非空指针的结果后,可以调用 mysql_num_rows()
来查找结果集中有多少行。
可以调用 mysql_fetch_row()
从结果集中获取行,或调用 mysql_row_seek()
和 mysql_row_tell()
获取或设置结果集中的当前行位置。
参见 第 3.6.9 节 “mysql_query() 成功后返回 NULL mysql_store_result()”。
指向包含结果的 MYSQL_RES
结果结构的指针。如果语句没有返回结果集或发生错误,则返回 NULL
。要确定是否发生错误,请检查 mysql_error()
是否返回非空字符串、mysql_errno()
是否返回非零值,或 mysql_field_count()
是否返回零。
如果 mysql_store_result()
成功,它将重置 mysql_error()
和 mysql_errno()
。
-
命令执行顺序不正确。
-
内存不足。
-
MySQL 服务器已关闭。
-
查询期间与服务器的连接断开。
-
发生未知错误。