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