$model_name = new ....$model_member = new ...$model_account = new ...$model_name->beginTransaction();//位置1
if(!$model_name->query(.....)){
//失败回滚
$model_name->rollback();
}
//位置2
//对象发生变化
if(!$model_member->query(.....)){
//失败回滚
$model_name->rollback();
}
//位置3
//对象发生变化
if(!$model_account->query(.....)){
//失败回滚
$model_name->rollback();
}当位置3出错时,事务回滚,位置1的sql未提交,位置2的sql提交了,这种情况怎么解决?
表都是事务表
问题是不是出在实例上面
$oOrderModel = Model_EcmOrder::getInstance();
$oOrderModel->beginTransaction();
//位置1
if(!$oOrderModel->edit($value['order_id'], array('freeze_state' =>'1')))
{
//执行失败回滚事务
$oOrderModel ->rollBack();
return ;
}
$query = "UPDATE ii_account SET ......";
$oAccountModel = Model_Account::getInstance();
//位置2
if(!$oAccountModel->query($query)){
//注意这里是用开启事务的句柄执行回滚事务的
$oOrderModel ->rollBack();
return ;
}
$oAccountLog = Model_AccountLog::getInstance();
$acclog = "INSERT INTO ii_account_log .......";
//位置3
if(!$oAccountLog->query($acclog)){
//注意这里是用开启事务的句柄执行回滚事务的
$oOrderModel ->rollBack();
return;
}
$oOrderModel->commit();
//模型 Model_EcmOrder Model_Account Model_AccountLog 都继承 baseModel
// baseModel 中有方法 beginTransaction() rollBack() ...