MYSQL_RES *
mysql_store_result(MYSQL *mysql)
mysql_store_result()
是一個同步函數。它的非同步對應函數是 mysql_store_result_nonblocking()
,適用於需要與伺服器進行非同步通訊的應用程式。請參閱 第 7 章,C API 非同步介面。
在呼叫 mysql_real_query()
或 mysql_query()
之後,對於每個成功產生結果集的語句 (SELECT
、SHOW
、DESCRIBE
、EXPLAIN
、CHECK TABLE
等等),您必須呼叫 mysql_store_result()
或 mysql_use_result()
。您也必須在使用完結果集後呼叫 mysql_free_result()
。
對於其他語句,您不需要呼叫 mysql_store_result()
或 mysql_use_result()
,但在所有情況下呼叫 mysql_store_result()
並不會造成任何損害或顯著的效能下降。您可以透過檢查 mysql_store_result()
是否傳回非零值來偵測語句是否具有結果集(稍後會詳細說明)。
如果您啟用多語句支援,您應該使用一個迴圈來從呼叫 mysql_real_query()
或 mysql_query()
的結果中擷取結果,該迴圈會呼叫 mysql_next_result()
以判斷是否還有更多結果。如需範例,請參閱 第 3.6.3 節,「多語句執行支援」。
若要判斷語句是否傳回結果集,請呼叫 mysql_field_count()
。請參閱 第 5.4.23 節,「mysql_field_count()」。
mysql_store_result()
會將查詢的整個結果讀取到用戶端,配置一個 MYSQL_RES
結構,並將結果放入此結構中。
如果語句未傳回結果集(例如,如果它是 INSERT
語句),或發生錯誤且結果集的讀取失敗,mysql_store_result()
會傳回 NULL
。
如果沒有傳回任何列,則會傳回空的結果集。(空的結果集與傳回值為 null 指標不同。)
在您呼叫 mysql_store_result()
並獲得不是 null 指標的結果後,您可以呼叫 mysql_num_rows()
來找出結果集中的列數。
您可以呼叫 mysql_fetch_row()
從結果集中提取列,或呼叫 mysql_row_seek()
和 mysql_row_tell()
以取得或設定結果集內的目前列位置。
請參閱 第 3.6.9 節,「mysql_query() 成功後傳回 NULL mysql_store_result()」。
指向包含結果的 MYSQL_RES
結果結構的指標。如果語句未傳回結果集或發生錯誤,則為 NULL
。若要判斷是否發生錯誤,請檢查 mysql_error()
是否傳回非空字串,mysql_errno()
是否傳回非零值,或 mysql_field_count()
是否傳回零。
如果 mysql_store_result()
成功,則會重設 mysql_error()
和 mysql_errno()
。
-
命令執行順序不正確。
-
記憶體不足。
-
MySQL 伺服器已關閉。
-
查詢期間與伺服器的連線遺失。
-
發生不明錯誤。