27.7.6.75 mysql_store_result()
MYSQL_RES *mysql_store_result(MYSQL *mysql)
Description
调用mysql_query()或mysql_real_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_query()或mysql_real_query()的调用中检索结果。有关示例,请参见第 27.7.15 节“ C API 多语句执行支持”。
如果您想知道语句是否应返回结果集,则可以使用mysql_field_count()进行检查。参见第 27.7.6.22 节,“ mysql_field_count()”。
mysql_store_result()向 Client 端读取查询的整个结果,分配MYSQL_RES
结构,并将结果放入此结构中。
如果该语句未返回结果集(例如,如果它是INSERT语句),或者发生错误且结果集读取失败,则mysql_store_result()返回NULL
。
如果没有返回行,则返回空结果集。 (空结果集不同于空指针作为返回值.)
调用mysql_store_result()并返回非空指针的结果后,可以调用mysql_num_rows()来查找结果集中有多少行。
您可以调用mysql_fetch_row()从结果集中获取行,或者调用mysql_row_seek()和mysql_row_tell()获取或设置结果集中的当前行位置。
See 第 27.7.20.1 节“为什么 mysql_store_result()有时在 mysql_query()返回成功后返回 NULL”.
Return Values
指向带有结果的MYSQL_RES
结果结构的指针。 NULL
,如果语句未返回结果集或发生错误。要确定是否发生错误,请检查mysql_error()返回非空字符串,mysql_errno()返回非零,还是mysql_field_count()返回零。
Errors
mysql_store_result()成功重置mysql_error()和mysql_errno()。
命令执行 Sequences 不正确。
记不清。
MySQL 服务器已经消失了。
在查询期间与服务器的连接已丢失。
出现未知错误。