文件首頁
MySQL 9.0 C API 開發者指南
下載本手冊
PDF (美式信紙) - 1.4Mb
PDF (A4) - 1.4Mb


5.4.86 mysql_use_result()

MYSQL_RES *
mysql_use_result(MYSQL *mysql)

說明

在調用 mysql_real_query()mysql_query() 之後,您必須針對每個成功產生結果集的語句,調用 mysql_store_result()mysql_use_result() (SELECTSHOWDESCRIBEEXPLAINCHECK TABLE 等)。在您完成結果集的使用後,也必須調用 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()