У меня возникла проблема с транзакцией, отправленной из инфраструктуры Yii (с использованием PDO) в базу данных InnoDB MySql, проблема была в том, что откат не работал, команда обновления сразу же выполняла транзакцию.Откат транзакций MySQL InnoDB не работает
- Я попытался установить autoCommit явно, без везения.
- Проверен общий журнал Mysql, только одно соединение открыто, с одной отправленной транзакцией отправлено, а затем только с одним откатом.
- В общем журнале «Начало транзакции», «Откат» и инструкция обновления были получены из одного и того же потока клиентов.
- Конец не обнаружен во всем журнале.
- Пробовал пример отката от клиента mysql (MySQLWorkbench) и откат работал!
Проблема была в том, что MySql сразу же отправил сообщение, когда его отправили из приложения Yii, и я не знал почему.
По какой-то конкретной причине я просто попытался включить log_bin в my.cnf и откат работал!
Может кто-нибудь объяснить, что только что произошло?
Я использую MySql 5.6.25, с PHP 5.6.10 и Yii 1.1.14.
Update:
Оказывается, что я сделал ошибку, я думал, что откат работал после включения 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-уровень-транзакции. – Christian
Никаких DDL не было выполнено, это было просто заявление Update –
показать свой код .. – scaisEdge