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