我有類似於下面的東西,在這同時刪除文件和數據庫條目的功能:ZF2已經活躍查詢阻止執行
$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();
修復它
是的,像$查詢 - > close()方法將是有益的,如果它存在。可悲的是,我找不到類似的結果集對象或數據庫適配器 – rwilson04
@ rwilson04使用我發現的編輯 – jkavalik
$ query是\ Zend \ Db \ ResultSet \ ResultSet的一個實例。它有一個'getDataSource()'方法,它返回一個\ Zend \ Db \ Adapter \ Driver \ Pdo \ Result,它有一個'getResource()'方法,但它返回一個PDOStatement。這兩種都沒有'close()'方法。 – rwilson04