Codeigniter 事务测试失败

Posted

技术标签:

【中文标题】Codeigniter 事务测试失败【英文标题】:Codeigniter transaction testing failing 【发布时间】:2015-11-03 05:05:50 【问题描述】:

我是 Codeigniter 的新手,并尝试按照以下官方指南在 mysql 数据库上实现 Codeigniter DB 事务

https://www.codeigniter.com/user_guide/database/transactions.html

在指南中建议为了启动测试模式,我需要将 TRUE 传递给 trans_start 函数,这应该回滚数据库中的更改,但这不是正在发生。我的查询正在提交。

这是我的代码

$data = array(
            'Name' => $this->input->post('name'),
            'Address' => $this->input->post('addr'),
            'IMEI' => $this->input->post('imei'),
            'DOB' => $this->input->post('dob'),
            'Maritial_Status' => $this->input->post('m_status'),
            'GCM_ID' => $this->input->post('gcm'),
            'Mobile' => $this->input->post('mobile'),
            'Snap' => $this->input->post('snap')
            );

        $this->db->trans_start(TRUE);
        $this->db->set('CreatedOn','NOW()', FALSE);
        $this->db->insert('registered_person', $data);
        $Person_ID_FK=$this->db->insert_id();
        $data1 = array(
            'Person_ID_FK' => $Person_ID_FK,
            'Name' => $this->input->post('r_name'),
            'Number' => $this->input->post('r_number'),
            'Relation' => $this->input->post('relation')
            );

        $this->db->insert('reg_per_emergency_contact', $data1);
        $this->db->set('Person_ID_FK', $Person_ID_FK); 
        $this->db->insert('location');

        $this->db->trans_complete();

        if($this->db->trans_status() === FALSE)
        
            $resultArray= array('flag'=>10,'status'=>-1);
        
        else
        
            $resultArray= array('flag'=>10,'status'=>1,'Person_ID'=>$Person_ID_FK);
        
        return $resultArray;

附:我的 MYSQL 表正在使用 InnoDB 引擎。

任何帮助将不胜感激。提前非常感谢

【问题讨论】:

【参考方案1】:

这个问题之前就存在并且已经修复。你可以通过提供你的日志来贡献这个问题[1]。 为了存档您的目的,您可以使用另一种方法。

    if($this->db->trans_status() === FALSE)
        
            $resultArray= array('flag'=>10,'status'=>-1);
        
        else
        
            $resultArray= array('flag'=>10,'status'=>1,'Person_ID'=>$Person_ID_FK);
        
        $this->db->trans_rollback(); //Rollback. This will remove your data from the database.
        return $resultArray;

不推荐使用 $this->db->trans_off(); 替代方案。

[1]。 https://github.com/bcit-ci/CodeIgniter/issues/5

【讨论】:

以上是关于Codeigniter 事务测试失败的主要内容,如果未能解决你的问题,请参考以下文章

Codeigniter,事务中的错误跟踪

在 PHP / CodeIgniter 中,不止一个事务开始了,而另一个事务没有完成;比如嵌套事务

CodeIgniter - 使用事务插入多个表

事务无法在 codeigniter 中回滚

使用 CodeIgniter 事务?

函数内所有查询的 Codeigniter 事务