文件首頁
MySQL 8.4 C API 開發人員指南
下載本手冊
PDF (US Ltr) - 1.4Mb
PDF (A4) - 1.4Mb


5.4.86 mysql_use_result()

MYSQL_RES *
mysql_use_result(MYSQL *mysql)

說明

在調用 mysql_real_query()mysql_query() 之後,對於每個成功產生結果集的語句 (SELECTSHOWDESCRIBEEXPLAINCHECK TABLE 等等),您必須調用 mysql_store_result()mysql_use_result()。在您使用完結果集後,您也必須調用 mysql_free_result()

mysql_use_result() 會啟動結果集的檢索,但實際上不會像 mysql_store_result() 那樣將結果集讀取到客戶端中。相反地,必須通過調用 mysql_fetch_row() 來單獨檢索每一列。這會直接從伺服器讀取查詢的結果,而不會將其儲存在臨時表或本機緩衝區中,這比 mysql_store_result() 快一些,而且使用的記憶體也少得多。客戶端僅為當前列和一個通訊緩衝區分配記憶體,該緩衝區可能會增長到 max_allowed_packet 位元組。

另一方面,如果您在客戶端對每一列進行大量處理,或者輸出發送到使用者可能會輸入 ^S (停止捲動) 的螢幕上,則不應使用 mysql_use_result() 進行鎖定讀取。這會佔用伺服器,並阻止其他執行緒更新任何正在從中擷取資料的表。

使用 mysql_use_result() 時,您必須執行 mysql_fetch_row() 直到返回 NULL 值,否則,未擷取的列會作為下一個查詢的結果集的一部分返回。如果您忘記這樣做,C API 會給出錯誤 Commands out of sync; you can't run this command now

您不能使用從 mysql_use_result() 返回的結果使用 mysql_data_seek()mysql_row_seek()mysql_row_tell()mysql_num_rows()mysql_affected_rows(),在 mysql_use_result() 完成之前,您也不能發出其他查詢。(但是,在您擷取完所有列後,mysql_num_rows() 會準確返回擷取的列數。)

使用完結果集後,您必須調用 mysql_free_result()

傳回值

一個 MYSQL_RES 結果結構。如果發生錯誤,則為 NULL

錯誤

如果 mysql_use_result() 成功,則會重設 mysql_error()mysql_errno()