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 伺服器已關閉。
-
在查詢期間遺失了與伺服器的連線。
-
發生不明錯誤。