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()
的迴圈來處理它們,以判斷是否還有更多結果。
當您呼叫 mysql_real_connect()
時,可以啟用 CLIENT_MULTI_RESULTS
,方法是明確地傳遞 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 伺服器已關閉。
-
在查詢期間遺失了與伺服器的連線。
-
發生不明錯誤。