當我嘗試執行回滾時出現以下錯誤。在mySQL中導致回滾失敗錯誤的原因是什麼?
回滾失敗。沒有活動的交易。
我搜索了這個問題,發現一些建議禁用自動提交設置。但我不確定如何做到這一點。上述錯誤還有其他原因嗎?我使用MYSQL和Zend和我的php.ini文件加載所需的驅動程序。
當我嘗試執行回滾時出現以下錯誤。在mySQL中導致回滾失敗錯誤的原因是什麼?
回滾失敗。沒有活動的交易。
我搜索了這個問題,發現一些建議禁用自動提交設置。但我不確定如何做到這一點。上述錯誤還有其他原因嗎?我使用MYSQL和Zend和我的php.ini文件加載所需的驅動程序。
默認情況下,MySQL在自動提交中工作。
$connection->setAttribute(Doctrine_Core::ATTR_AUTOCOMMIT, false);
另一個想法我已經是你沒有啓動事務(應在教義禁止自動提交):你可以把它關掉髮現問題
$connection->beginTransaction();
.....我呼籲回滾()函數在不同的地方2倍,在代碼
類UnitOfWork.php具有類似於catch塊:
catch (Exception $e) {
$this->em->close();
$conn->rollback();
throw $e;
}
當然,如果你的類沒有準備好找到一個已經關閉的實體管理器,並因此連接,你將有這個例外。最糟糕的是它掩蓋了異常的根本原因,因爲錯誤是在執行catch塊之前引起的。爲了解決這個問題,你可以在類的catch塊做了簡單的檢查:
$this->em->getConnection()->getTransactionNestingLevel()
如果嵌套層次grather比0存在:
catch(Exception $e) {
if($conn->isTransactionActive()) {
[rollback]
[close]
[rethrow] (if necessary)
}
}
+1。不應該把[重新拋出]放在if語句之外嗎?這樣,即使沒有活動事務,異常也會重新生成。 – 2014-11-04 01:36:20
您可以檢查是否交易與事務嵌套層存在,那麼你可以做回滾
我無法理解如何在評論中發佈代碼,因此只發布爲答案 – rahul 2010-08-04 20:38:59
@ jakub-zalas其中Symfony版本是否支持setAttribute? – 2015-06-11 17:10:19
這與Symfony無關。問題是關於教義1。 – 2015-06-12 06:12:52