Codeigniter事务测试失败

时间:2015-08-11 05:31:09

标签: php mysql codeigniter

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

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

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

这是我的代码

$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;

P.S。我的MYSQL表正在使用InnoDB Engine。

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

1 个答案:

答案 0 :(得分:0)

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

// truncate fractions to 100 nanoseconds precision
dt.fraction /= 100;
dt.fraction *= 100;

使用$ this-> db-> trans_off();不建议使用替代方法。

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