我升級php到7.4.13後
原本正常的程式出了問題
錯誤訊息如下:
SQLSTATE[HY000]: General error: 2014 Cannot execute queries while other unbuffered queries are active. Consider using PDOStatement::fetchAll(). Alternatively, if your code is only ever going to run against mysql, you may enable query buffering by setting the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute.
有照著建議調整還是一樣,不知道問題出在哪邊?
sql語法
INSERT INTO client_and_server_lists(type, ip, ou, name) SELECT 'client' as type, IP, OrgName, Owner FROM drip_client_list
pdo 執行sql的execute方法
PDO設定
SQL語法本身沒問題,直接用phpMyAdmin執行是正常的
另外把SQL語法中的insert拿掉只保留後面的select又可以正常
不知道是不是 insert ... select....這種寫法在php 7.4版的pdo中會出現問題?
解法1
另外創一個executeNoFetch方法就好了
不過全站全部的script都要改了....
解法2
execute方法調整
針對錯誤碼 HY000 做例外處理~~
官方
Bug #80458 PDOStatement::fetchAll() throws for upsert queries
Bug #80458 PDOStatement::fetchAll() throws for upsert queries #6482
我想下一版應該就正常了~~
如果在 fetch 之前,先關掉 MYSQL_ATTR_USE_BUFFERED_QUERY
$db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false);
關完後,再fetch
$db->fetch(PDO::FETCH_ASSOC)
可行嗎?