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