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 服务器已经消失。
-
查询期间与服务器的连接丢失。
-
出现未知错误。