我遇到了从Yii框架(使用PDO)发送到InnoDB MySql数据库的事务的问题,问题是:回滚无效,更新语句立即提交。
问题只是当MySql从Yii应用程序发送并且我不知道原因时立即提交。
由于没有特别的原因,我只是尝试在my.cnf中启用log_bin并且回滚工作!!
有人可以解释一下刚刚发生了什么吗?
我使用的是MySql 5.6.25,PHP 5.6.10和Yii 1.1.14。
更新
事实证明我犯了一个错误,我认为启用log_bin后回滚有效,但它没有。
所以现在我回到原来的问题,回滚不起作用,这里是源代码:
$transaction = Yii::app()->db->beginTransaction();
try {
$data = array();
// fill some data here..
$model = Model::createOrUpdate($data);
$errors = $model->getErrors();
} catch (Exception $e) {
$errors []= $e->getMessage();
}
if (empty($errors)) {
$msg = 'Success message!';
$transaction->commit();
echo CJSON::encode(array('success', $msg));
} else {
if ($transaction->active) {
$transaction->rollback();
}
echo CJSON::encode(array('error', implode(', ', $errors)));
}
Yii::app()->end();
答案 0 :(得分:0)
经过一些调试后,我发现了背后的原因。 基本上是方法:
Model::createOrUpdate($data);
正在调用存储过程,因此,如果有人遇到此问题,请检查是否已覆盖。