如果用户不按提交按钮,我会使用 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 请求完成的 sql 事务(从 trans_begin() 开始) ) 会滚烤吗?
这可能吗?请指导我...
最佳答案
这里有很多事情需要解决。
首先是您的数据库和模式类型必须支持事务(例如,如果您在 MySQL 中使用 MyISAM 表类型,您将无法使用事务)。
其次,如果 $this->db->trans_status() === false,测试事务是否在 CI 中成功,您将错误消息写入错误日志。
最后,我会使用一种替代方法来替代上述方法(如果可能的话)——一种可能的方法是将您的数据存储在一个 session 中(通过不同的阶段)并在最后一点进行调用或多个数据库调用(当用户点击提交时)。您仍然可以通过这种方式使用事务,它简化了问题。
关于php - SQL 代码点火器 : Create savepoint and roll-back to the savepoint/Rollback multiple transaction from controller,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25499830/