好吧,让我先解决这个问题。我的问题与此类似: Cannot rollback transaction in Zend Framework
我的表总是 innoDB,总是。我检查了有问题的表,它确实是 innoDB。到问题了。。
我有一个数据库实例,并且通过此事务运行的模型实例访问同一个数据库:
$db->beginTransaction();
try {
// Run an insert
$model_record->insert(array('single_item' => 'its value'));
// More logic, and run an update.
$model_record->this_value = 'that';
// Save it
$model_record->save();
//Commit the transaction
$db->commit();
} catch (Exception $e) {
// It finds the rollback, yet does nothing.
$db->rollBack();
}
现在,我发现这不起作用的原因是我在测试期间超出了一行的字符限制,以确保所有逻辑都正确。
它没有回滚。最重要的是,带有“single_item”的记录在数据库中。但是更新后的值不是。
我是否完全错过了一些小东西,我从来没有遇到过 MySQL 和 innoDB 的事务问题。这可能与 MySQL 相关还是 ZF 相关?任何见解都是有帮助的,谢谢。
更新:
我一直在进行更多测试,以下是一些可能有帮助的结果:
$this->_db->beginTransaction();
// This works
$this->_db->insert('table_a',
array(
'a_field' => 'transaction test',
)
);
// This does not work, at all. It inserts and does not rollback. There is no commit.
$_table_a_model->insert(
array(
'a_field' => 'transaction test',
)
);
$this->_db->rollback();
附加更新 您需要获取模型的实例,并在其上调用事务。
$the_model = $this->_model->getAdapter();
$the_model->beginTransaction();
这没有为多个表的事务留下空间,无需为每个模型实例执行多个事务。有什么想法没有恢复到基本数据库实例?