[英]PDO + SQL Buffered queries
我需要在脚本中运行一堆查询,但出现此错误
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
的调用,但是我仍然看到相同的错误。 我找到了另一个建议调用closeCursor()
答案 ,但是如果我将closeCursor
替换为fetchAll
,则结果仍然相同。 我也尝试将SQL合并到1个查询中,但是出现语法错误,似乎我无法在1个查询中运行多个语句。
根据评论,似乎可以通过调用exec
方法解决问题。
问题是尝试使用同一连接对象执行多个查询,而由于某种原因该连接对象具有活动的未缓冲查询。 您需要从连接中删除该活动的无缓冲查询,或者在每次执行查询时关闭连接并创建新的连接对象。 一种变通方法是使用exec
方法,但是选择该解决方案将无法获得此确切问题的答案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.