尝试执行回滚时出现以下错误。
回滚失败。没有活动交易。
我搜索了这个问题并找到了一些建议禁用自动提交设置的建议。但我不确定如何做到这一点。上述错误还有其他原因吗?我正在使用MYSQL和Zend,我的php.ini文件加载了所需的驱动程序。
答案 0 :(得分:3)
默认情况下,MySQL在自动提交中工作。您可以使用以下命令将其关闭:
$connection->setAttribute(Doctrine_Core::ATTR_AUTOCOMMIT, false);
我的另一个想法是你没有启动事务(它应该禁用Doctrine中的自动提交):
$connection->beginTransaction();
答案 1 :(得分:1)
类 UnitOfWork.php 有一个类似于以下的catch块:
catch (Exception $e) {
$this->em->close();
$conn->rollback();
throw $e;
}
当然,如果您的类尚未准备好找到已经关闭的实体管理器并因此找到连接,那么您将遇到此异常。最糟糕的是它掩盖了异常的根本原因,因为错误是在catch块执行之前引起的。要修复它,你可以在你的班级'catch block:
中进行简单的检查catch(Exception $e) {
if($conn->isTransactionActive()) {
[rollback]
[close]
[rethrow] (if necessary)
}
}
答案 2 :(得分:0)
发现问题.....我在代码中的不同位置调用了rollback()函数2次
答案 3 :(得分:0)
您可以检查事务是否存在事务嵌套级别:
$this->em->getConnection()->getTransactionNestingLevel()
如果嵌套级别不是0,那么你可以进行回滚