【问题标题】:SQL Codeigniter : Create savepoint and roll-back to the savepoint / Rollback multiple transaction from controllerSQL Codeigniter:创建保存点并回滚到保存点/从控制器回滚多个事务
【发布时间】:2014-10-19 10:12:21
【问题描述】:

如果用户不按提交按钮而不是回滚由 ajax 请求完成的所有 sql 事务,我将使用 ajax 请求从页面处理 db 事务(我将管理此事务,但如果刷新当前页面,当前遵循的逻辑不起作用) .

我尝试了以下代码,但无法正常工作,

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 请求完成的所有sql stransaction(从trans_begin() 开始)将被回滚? 这可能吗?请指导我...

【问题讨论】:

    标签: php mysql sql codeigniter


    【解决方案1】:

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

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

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

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

    【讨论】: