別被兩種說法搞混了,這些都是優點(它們其實應該是一體兩面)
一方面,這對於產生大量結果集的 SQL 查詢可以節省相當多的記憶體。
另一方面,您可以立即開始處理結果集……
(PHP 4 >= 4.0.6, PHP 5)
mysql_unbuffered_query — 傳送 SQL 查詢到 MySQL 而不擷取和緩衝結果列
此擴充自 PHP 5.5.0 起已被棄用,並在 PHP 7.0.0 中移除。建議改用 MySQLi 或 PDO_MySQL 擴充。另請參閱 MySQL:選擇 API 指南。此函式的替代方案包括:
mysql_unbuffered_query() 將 SQL 查詢 query
送到 MySQL,但不像 mysql_query() 那樣自動擷取並緩衝結果列。對於產生大量結果集的 SQL 查詢,這可以節省相當多的記憶體,而且您可以在擷取第一列後立即開始處理結果集,而不必等到整個 SQL 查詢執行完畢。要在多個資料庫連線開啟時使用 mysql_unbuffered_query(),您必須指定可選參數 link_identifier
來識別您要使用的連線。
query
要執行的 SQL 查詢。
查詢中的資料應該正確地跳脫。
link_identifier
MySQL 連線。如果未指定連線識別碼,則假設使用由 mysql_connect() 開啟的最後一個連線。如果找不到此類連線,它將嘗試建立一個連線,如同以無參數呼叫 mysql_connect() 一樣。如果找不到或建立連線,則會產生 E_WARNING
等級的錯誤。
對於 SELECT、SHOW、DESCRIBE 或 EXPLAIN 陳述式,mysql_unbuffered_query() 在成功時傳回 資源,在錯誤時傳回 false
。
對於其他類型的 SQL 陳述式,例如 UPDATE、DELETE、DROP 等,mysql_unbuffered_query() 在成功時傳回 true
,在錯誤時傳回 false
。
注意:
mysql_unbuffered_query() 的好處是有代價的:您不能在從 mysql_unbuffered_query() 傳回的結果集上使用 mysql_num_rows() 和 mysql_data_seek(),直到擷取所有列為止。您還必須從未緩衝的 SQL 查詢中擷取所有結果列,才能使用相同的
link_identifier
向 MySQL 傳送新的 SQL 查詢。
別被兩種說法搞混了,這些都是優點(它們其實應該是一體兩面)
一方面,這對於產生大量結果集的 SQL 查詢可以節省相當多的記憶體。
另一方面,您可以立即開始處理結果集……
使用無緩衝查詢時,您並非一定要讀取結果集中的所有列,您可以隨時選擇退出並使用 mysql_free_result。想像一下,當前 50 列資料就足夠時,卻要查看 100 萬列?只需釋放結果集,您就可以繼續進行其他操作了。
如果使用優化的 MyISAM 資料表,我猜這個函式有個很大的優點,那就是只要資料表中的任何列沒有被更新,就可以同時執行 SELECT 和 INSERT 操作。