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() 成功后 mysql_store_result() 返回 NULL”。
指向包含结果的 MYSQL_RES
结果结构的指针。如果语句没有返回结果集或发生错误,则为 NULL
。要确定是否发生错误,请检查 mysql_error()
是否返回非空字符串,mysql_errno()
是否返回非零值,或者 mysql_field_count()
是否返回零。
如果 mysql_store_result()
成功,则重置 mysql_error()
和 mysql_errno()
。
-
命令执行顺序不正确。
-
内存不足。
-
MySQL 服务器已关闭。
-
查询期间与服务器的连接断开。
-
发生未知错误。