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_next_result()
的迴圈,來判斷是否有更多結果,從呼叫 mysql_real_query()
或 mysql_query()
的動作中擷取結果。如需範例,請參閱 第 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 伺服器已關閉。
-
查詢期間遺失與伺服器的連線。
-
發生不明錯誤。