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 Value | Description |
---|---|
0 | 成功,有更多结果 |
-1 | 成功,没有其他结果 |
>0 | 发生错误 |
Errors
命令执行 Sequences 不正确。例如,如果您没有为上一个结果集调用mysql_use_result()。
MySQL 服务器已经消失了。
在查询期间与服务器的连接已丢失。
出现未知错误。