2016-03-05 70 views
0

我需要運行一堆腳本查詢,但我得到這個錯誤PDO + SQL緩衝查詢

PDOException(HY000): SQLSTATE[HY000]: General error: 2014 Cannot execute queries while other unbuffered queries are active. Consider using PDOStatement::fetchAll().

我的腳本

$db = Database::connection(); 

$sql = <<<SQL 
CREATE TABLE IF NOT EXISTS `comments` (
    ... 
) ENGINE=InnoDB AUTO_INCREMENT=86 DEFAULT CHARSET=utf8; 

SQL; 

$db->query($sql)->fetchAll(); 

$sql = <<<SQL 
CREATE TABLE IF NOT EXISTS `comments_ratings` (
    ... 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

SQL; 

$db->query($sql)->fetchAll(); 

$sql = <<<SQL 
CREATE TRIGGER ... 
SQL; 

$db->query($sql)->fetchAll(); 

$sql = <<<SQL 
CREATE TRIGGER ...; 
SQL; 

$db->query($sql)->fetchAll(); 

我的SQL語法是有效的,如果我跑手工查詢成功執行。正如你所看到的,我在每個查詢之後添加了對fetchAll的調用,正如錯誤消息所示,但是我仍然看到相同的錯誤。我發現another answer,建議撥打closeCursor()但如果我交換fetchAllcloseCursor結果仍然是相同的。我也嘗試將SQL組合成1個查詢,但是我得到一個語法錯誤,好像我無法在1個查詢中運行多個語句。

+0

你有沒有嘗試過第二回答中提到的解決方案?無論如何,你應該把這個問題聯繫起來以避免這樣的事情。社區不知道您要引用哪個答案以及哪個網站。 –

+0

@ConsiderMe是的,仍然沒有運氣。我可能嘗試了網絡上的所有內容,我作爲最後的手段在這裏發佈。 –

+0

您的數據庫類是否具有'exec'方法以及'查詢'方法。如果是這樣,那就改用它。是的,我知道它應該與'query'方法一起工作,但它依賴於你的db類在運行query方法時實際執行的操作。 –

回答

0

根據評論,似乎通過調用exec方法解決了問題。

問題是試圖使用同一連接對象執行多個查詢,而由於某種原因,連接對象具有活動的非緩衝查詢。您需要從連接中刪除該活動的未緩衝查詢,或者關閉連接並在每次執行查詢時創建一個新的連接對象。解決方法是使用exec方法,但選擇該解決方案將無法得到這個確切問題的答案。