也许其他人和我有同样的问题。我遇到了错误:
在其他无缓冲查询处于活动状态时无法执行查询。考虑使用 PDOStatement::fetchAll()。或者,如果您的代码只针对 mysql 运行,您可以通过设置 PDO::MYSQL_ATTR_USE_BUFFERED_QUERY 属性来启用查询缓冲。
在 PDO 上。正如在许多线程中提到的那样,该错误至少可能是以下问题之一:
closeCursor()
查询游标没有像这里提到的那样关闭;MySQL 错误 2014 的原因在其他无缓冲查询处于活动状态时无法执行查询- 一个语句有两个以上的查询,如下所述:PDO Cannot execute queries while other unbuffered queries are active
- 此处提到的 mysql-driver 中的错误:什么导致 PDO 错误无法在其他无缓冲查询处于活动状态时执行查询?
在我的情况下,以上所有都没有帮助,我花了一些时间才解决了这个问题。这是我的代码(伪代码):
$stmt->startTransaction();
$stmt = db::getInstance()->prepare("CALL phones(:phone)");
$stmt->prepare('SELECT * FROM database');
$stmt->execute();
$aData = $stmt->fetchAll();
$stmt->closeCursor();
$stmt->query("USE sometable;");
在我将其更改为:
$stmt->startTransaction();
$stmt = db::getInstance()->prepare("CALL phones(:phone)");
$stmt->prepare('SELECT * FROM database');
$stmt->execute();
$aData = $stmt->fetchAll();
$stmt->closeCursor();
$stmt->exec("USE sometable;");
它对我有用。查询和执行有什么区别?
PDO::exec() - "Execute an SQL statement and return the number of affected rows"
PDO::query() - "Executes an SQL statement, returning a result set as a PDOStatement object"
为什么在这种情况下 PDO::query() 不起作用?调用时,游标关闭。