【发布时间】:2016-03-05 11:08:50
【问题描述】:
我需要在脚本中运行一堆查询,但我得到了这个错误
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 个查询中运行多个语句。
【问题讨论】:
-
您是否尝试过上述问题的第二个答案中给出的解决方案?无论如何,您应该只链接问题以避免此类事情。社区不知道您指的是哪个答案以及来自哪个网站。
-
@ConsiderMe 是的,仍然没有运气。我可能尝试了网络上的所有内容,作为最后的手段,我在这里发布。
-
您的数据库类是否具有
exec方法以及“查询”方法。如果是这样,请改用它。是的,我知道它应该与query方法一起使用,但这取决于您的 db 类在运行query方法时实际执行的操作。 -
您是否在
Database::connection方法中执行SELECT 查询?如果是这样,请确保正确关闭它。无论如何,我认为如果您在不泄露密码的情况下分享connection方法的代码会很有帮助。 -
猜测 - 您的
database类期望查询返回结果集。 'exec' 方法适用于成功或失败的 SQL。例如: 'create' ,alter即 (DDL) 语句。