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 服务器已关闭。
-
查询期间与服务器的连接断开。
-
发生未知错误。