我需要在脚本中运行一堆查询,但是我收到此错误
PDOException(HY000):SQLSTATE [HY000]:常规错误:2014无法 在其他未缓冲的查询处于活动状态时执行查询。考虑 使用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()
,但如果我将fetchAll
与closeCursor
交换,结果仍然相同。我也尝试将SQL组合成1个查询,但是我收到了语法错误,似乎我无法在1个查询中运行多个语句。
答案 0 :(得分:0)
根据评论,似乎通过调用exec
方法来解决问题。
问题是尝试使用相同的连接对象执行多个查询,而连接对象由于某种原因具有活动的无缓冲查询。您需要从连接中删除该活动的无缓冲查询,或者每次执行查询时关闭连接并创建新的连接对象。解决方法是使用exec
方法,但选择该解决方案无法得到这个问题的答案。