文档首页
MySQL 8.4 C API 开发人员指南
下载本手册
PDF (US Ltr) - 1.4Mb
PDF (A4) - 1.4Mb


5.4.51 mysql_next_result()

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 节,“多语句执行支持”.

返回值

返回值 描述
0 成功且存在更多结果
-1 成功且不存在更多结果
>0 发生错误

错误