【发布时间】:2015-03-19 22:48:22
【问题描述】:
也许其他人和我有同样的问题。 我遇到了错误:
在其他无缓冲查询处于活动状态时无法执行查询。 考虑使用 PDOStatement::fetchAll()。或者,如果您的代码 只会针对mysql运行,您可以启用查询 通过设置 PDO::MYSQL_ATTR_USE_BUFFERED_QUERY 属性进行缓冲。
在 PDO 上。正如在许多线程中提到的那样,该错误至少可能是以下问题之一:
- 查询游标没有像这里提到的
closeCursor()关闭; Causes of MySQL error 2014 Cannot execute queries while other unbuffered queries are active - 有两个以上的查询,其中一条语句如下所述:PDO Cannot execute queries while other unbuffered queries are active
- 这里提到的 mysql-driver 中的一个错误:What is causing PDO error Cannot execute queries while other unbuffered queries are active?
在我的情况下,以上所有内容都没有帮助,我花了一些时间才解决问题。这是我的代码(伪代码):
$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() 不起作用?调用时光标关闭。
【问题讨论】:
-
"当调用时,游标已关闭" SELECT * FROM database 的游标是,但是其他游标呢?
标签: php mysql pdo unbuffered-queries