PDO + SQL缓冲查询

时间:2016-03-05 11:08:51

标签: php sql

我需要在脚本中运行一堆查询,但是我收到此错误

  

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(),但如果我将fetchAllcloseCursor交换,结果仍然相同。我也尝试将SQL组合成1个查询,但是我收到了语法错误,似乎我无法在1个查询中运行多个语句。

1 个答案:

答案 0 :(得分:0)

根据评论,似乎通过调用exec方法来解决问题。

问题是尝试使用相同的连接对象执行多个查询,而连接对象由于某种原因具有活动的无缓冲查询。您需要从连接中删除该活动的无缓冲查询,或者每次执行查询时关闭连接并创建新的连接对象。解决方法是使用exec方法,但选择该解决方案无法得到这个问题的答案。