int
mysql_stmt_store_result(MYSQL_STMT *stmt)
结果集是通过调用 mysql_stmt_execute()
来执行已准备好的 SQL 语句(例如 SELECT
、SHOW
、DESCRIBE
和 EXPLAIN
)而生成的。默认情况下,成功执行的预处理语句的结果集不会在客户端上进行缓冲,并且 mysql_stmt_fetch()
会从服务器一次获取一行结果集。若要使完整的结果集缓存在客户端上,请在使用 mysql_stmt_bind_result()
绑定数据缓冲区之后以及调用 mysql_stmt_fetch()
来获取行之前调用 mysql_stmt_store_result()
。(有关示例,请参阅 第 6.4.12 节“mysql_stmt_fetch()”。)
对于结果集处理,调用 mysql_stmt_store_result()
是可选的,除非您要调用 mysql_stmt_data_seek()
、mysql_stmt_row_seek()
或 mysql_stmt_row_tell()
。这些函数需要可查找的结果集。
在执行不会生成结果集的 SQL 语句后,无需调用 mysql_stmt_store_result()
,但如果这样做,也不会造成任何损害或明显的性能问题。您可以通过检查 mysql_stmt_result_metadata()
是否返回 NULL
来检测该语句是否生成了结果集。有关更多信息,请参阅 第 6.4.24 节“mysql_stmt_result_metadata()”。
默认情况下,MySQL 不会计算 mysql_stmt_store_result()
中所有列的 MYSQL_FIELD->max_length
,因为计算此值会大大降低 mysql_stmt_store_result()
的速度,并且大多数应用程序不需要 max_length
。如果您希望更新 max_length
,可以调用 mysql_stmt_attr_set(MYSQL_STMT, STMT_ATTR_UPDATE_MAX_LENGTH, &flag)
来启用此功能。请参阅 第 6.4.3 节“mysql_stmt_attr_set()”。
-
命令执行顺序不正确。
-
内存不足。
-
MySQL 服务器已关闭。
-
查询期间与服务器的连接断开。
-
发生未知错误。