繁体   English   中英

PDO + SQL缓冲查询

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM