int
mysql_next_result(MYSQL *mysql)
mysql_next_result()
是一个同步函数。它的异步对应函数是 mysql_next_result_nonblocking()
,供需要与服务器异步通信的应用程序使用。参见 第 7 章,C API 异步接口.
mysql_next_result()
用于执行指定为单个语句字符串的多个语句时,或使用 CALL
语句执行存储过程时,存储过程可以返回多个结果集。
mysql_next_result()
读取下一个语句结果并返回一个状态,以指示是否存在更多结果。如果 mysql_next_result()
返回错误,则表示没有更多结果。
在每次调用 mysql_next_result()
之前,必须为当前语句调用 mysql_free_result()
(如果它是一个返回结果集而不是仅返回结果状态的语句)。
调用 mysql_next_result()
后,连接的状态就像您为下一个语句调用了 mysql_real_query()
或 mysql_query()
一样。这意味着您可以调用 mysql_store_result()
、mysql_warning_count()
、mysql_affected_rows()
等等。
如果您的程序使用 CALL
语句执行存储过程,则必须启用 CLIENT_MULTI_RESULTS
标志。这是因为每个 CALL
除了可能由过程中执行的语句返回的任何结果集外,还会返回一个结果以指示调用状态。由于 CALL
可以返回多个结果,因此可以使用循环来处理它们,该循环调用 mysql_next_result()
来确定是否存在更多结果。
CLIENT_MULTI_RESULTS
可以在您调用 mysql_real_connect()
时启用,可以通过显式传递 CLIENT_MULTI_RESULTS
标志本身来启用,也可以通过隐式传递 CLIENT_MULTI_STATEMENTS
(它也启用 CLIENT_MULTI_RESULTS
)来启用。默认情况下启用 CLIENT_MULTI_RESULTS
。
还可以通过调用 mysql_more_results()
来测试是否存在更多结果。但是,此函数不会更改连接状态,因此如果它返回 true,您仍然必须调用 mysql_next_result()
以前进到下一个结果。
有关如何使用 mysql_next_result()
的示例,参见 第 3.6.3 节,“多语句执行支持”.
-
命令以不正确的顺序执行。例如,如果您没有为先前结果集调用
mysql_use_result()
。 -
MySQL 服务器已断开。
-
查询过程中连接到服务器已断开。
-
发生未知错误。