我有类似于下面的东西,在这同时删除文件和数据库条目的功能:
$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();
修复它