27.7.6.47 mysql_next_result()

int mysql_next_result(MYSQL *mysql)

Description

当您执行指定为单个语句字符串的多个语句时,或者使用CALL语句执行存储过程(可以返回多个结果集)时,将使用mysql_next_result()

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()的循环来处理它们,以确定是否还有更多结果。

可以在调用mysql_real_connect()时启用CLIENT_MULTI_RESULTS,或者通过传递CLIENT_MULTI_RESULTS标志本身来显式,或者通过CLIENT_MULTI_STATEMENTS隐式传递(也将启用CLIENT_MULTI_RESULTS)。在 MySQL 5.7 中,默认启用CLIENT_MULTI_RESULTS

也可以通过调用mysql_more_results()来测试是否还有更多结果。但是,此函数不会更改连接状态,因此,如果它返回 true,则仍必须调用mysql_next_result()以前进到下一个结果。

有关显示如何使用mysql_next_result()的示例,请参见第 27.7.15 节“ C API 多语句执行支持”

Return Values
Return ValueDescription
0成功,有更多结果
-1成功,没有其他结果
>0发生错误
Errors

命令执行 Sequences 不正确。例如,如果您没有为上一个结果集调用mysql_use_result()

MySQL 服务器已经消失了。

在查询期间与服务器的连接已丢失。

出现未知错误。