SQL代码点火器:创建保存点并回滚到保存点/从控制器回滚多个事务


SQL Codeigniter : Create savepoint and roll-back to the savepoint / Rollback multiple transaction from controller

如果用户没有按下提交按钮,我将使用ajax请求处理页面中的数据库事务,而不是回滚由ajax请求完成的所有sql事务(我将对此进行管理,但如果刷新当前页面,当前遵循的逻辑不起作用)。

我尝试了以下代码,但不起作用,

function viewPage(){
   $needRollBack=$this->session->userdata('needRollBack');
   if($needRollBack){
      $this->db->trans_rollback();
   }
   $this->db->trans_begin();
   $this->MyModel1->insert(.....);
   $this->MyModel2->insert(.....);
.........................
}
function submitDetails(){
   $this->db->trans_complete();
   $this->session->set_userdata('needRollBack',false);
}

当再次调用viewPage()函数或刷新页面时,如果submitDetails()没有被调用,则回滚所有通过ajax请求(从trans_begin()开始)完成的sql stransack?这可能吗?请指导我…

这里有很多事情需要解决。

首先,你的数据库和模式类型必须支持事务(例如,如果你在MySQL中使用MyISAM表类型,你将无法使用事务)。

其次,为了测试事务在CI中是否成功,如果$this->db->trans_status() === false,则将错误消息写入错误日志。

最后,我将使用上述方法的替代方法(如果可能的话)-一种可能的方法是将数据存储在会话中(通过不同阶段),并在最后一点(当用户单击提交时)进行调用或多次数据库调用。您仍然可以通过这种方式使用事务,这简化了问题。