【发布时间】:2017-02-18 01:12:43
【问题描述】:
我遇到了从 Yii 框架(使用 PDO)发送到 InnoDB MySql 数据库的事务的问题,问题是:回滚不起作用,更新语句正在立即提交。
- 我尝试显式设置 autoCommit,但没有成功。
- 检查了Mysql的一般日志,只打开了一个Connection,发送了一个Start事务,之后只回滚了一个。
- 在一般日志中,“开始事务”、“回滚”和更新语句都来自同一个客户端线程。
- 在整个日志中没有找到提交。
- 从 mysql 客户端 (MySQLWorkbench) 尝试了一个回滚示例,并且回滚成功!
问题只是 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();
【问题讨论】:
-
您执行了哪些查询? MySQL 不知道 DDL-Level-Transactions。
-
没有执行 DDL,只是一条 Update 语句
-
显示你的代码..
标签: php mysql pdo yii transactions