文档首页
MySQL 9.0 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 发生错误

错误