gpt4 book ai didi

php - ZF2 已经激活的查询阻止执行

转载 作者:太空宇宙 更新时间:2023-11-03 12:16:13 26 4
gpt4 key购买 nike

我在删除文件和数据库条目的函数中有类似以下内容:

$adapter = $this->getAdapter();
$query = $adapter->query("call find_results_by_job_id(?)", array($jobId));
$items = array();
while (($current = $query->current()) !== false)
{
$id = $current['id'];
$items[] = $id;
$query->next();
}
$this->deleteFromDataStore($items);
$result = $adapter->query("call delete_results_by_job_id(?)", array($jobId), \Zend\Db\Adapter\Adapter::QUERY_MODE_EXECUTE);

(其中一些可能看起来不是最好的方法,因为我在这个例子中简化了它)

我在最后一行收到此错误:SQLSTATE[HY000]: General error: 2014 Cannot execute queries while other unbuffered queries are active.

我假设问题是因为当我尝试执行另一个语句时查询/适配器尚未关闭迭代结果的连接。如果是这样,如何重用适配器,或关闭查询,或在最后一行之前我必须做的任何事情?

奇怪的是,遵循几乎完全相同模式的代码在另一种方法中工作。


回答:

当使用 PDO 驱动时,$query->getDataSource()->getResource()->closeCursor(); 修复了它

最佳答案

似乎您正在使用 unbuffered query in MySQL .

如果是这样,您将不得不打开缓冲或中断先前似乎挂起的查询的执行?

类似于$query->close()

编辑:

如果 $queryStatementInterface 的实例,那么有 getResource() 返回 mysqli_stmt 并且你可以调用close()在上面。

EDIT2:(合并最终决议)

如果它使用 PDO,您可以获取 PDOStatement 并调用 closeCursor()

关于php - ZF2 已经激活的查询阻止执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22029811/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com