首頁 >資料庫 >mysql教程 >為什麼 MySQL 回傳錯誤 2014:「當其他未緩衝的查詢處於活動狀態時無法執行查詢」?

為什麼 MySQL 回傳錯誤 2014:「當其他未緩衝的查詢處於活動狀態時無法執行查詢」?

Susan Sarandon
Susan Sarandon原創
2024-12-23 15:42:10823瀏覽

Why Does MySQL Return Error 2014:

MySQL 錯誤2014:無法執行查詢,而其他未緩衝的查詢處於活動狀態

MySQL 的客戶端協定限制在結果時同時執行多個查詢先前查詢的內容尚未完全檢索。出現此限制是由於某些查詢的無緩衝性質,其中行是增量獲取的,而不是像緩衝查詢中那樣立即快取。

當執行無緩衝查詢並在從查詢中檢索所有行之前嘗試執行另一個查詢時首先,MySQL 傳回錯誤「當其他未緩衝的查詢處於活動狀態時,無法執行查詢。」

模擬準備語句

PDO::ATTR_EMULATE_PREPARES指定準備好的語句是模擬還是作為本機 MySQL 準備好的語句執行。如果設定為 false,使用無緩衝的 PHP 查詢會觸發錯誤 2014。這是因為 PHP 的內部查詢結果快取機制無法正確處理無緩衝的查詢。

解決錯誤

有幾種方法可以解決這個問題錯誤:

  • 使用緩衝查詢:啟用查詢PDO::MYSQL_ATTR_USE_BUFFERED_QUERY 會導致查詢以緩衝模式執行,從而自動一次取得所有行。但是,如果結果集很大,這可能會佔用大量記憶體。
  • 取得所有行: 在查詢上呼叫 fetchAll() 可確保擷取所有行並關閉結果遊標,允許後續查詢無錯誤地執行。
  • 關閉遊標: 關閉遊標closeCursor() 釋放與無緩衝查詢相關的 MySQL 資源,並允許執行後續查詢。但是,這會阻止從未緩衝的查詢中取得任何剩餘行。

最佳實踐

為避免遇到此錯誤,建議:

  • 對於獲取有限數量的無緩衝查詢,預設使用緩衝查詢或fetchAll()行數。
  • 如果沒有必要,請避免巢狀查詢,因為在循環內執行多次內部查詢可能會加劇錯誤。
  • 完成取得資料以釋放伺服器後關閉遊標資源並防止錯誤發生。
  • 考慮遷移到 mysqlnd 驅動程序,該驅動程式記憶體效率更高,並且支援模擬準備聲明。

以上是為什麼 MySQL 回傳錯誤 2014:「當其他未緩衝的查詢處於活動狀態時無法執行查詢」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn