Codeigniter交易不起作用

时间:2015-02-24 11:32:15

标签: php mysql codeigniter

我有一个将行插入表格的函数,如下所示

function fn_insert_user() {
    $this->db->trans_begin();
    $this->db->query('INSERT INTO user VALUES(9,"john", "9865321245")');
    $this->db->query('INSERT INTO user VALUES(8,"martin", "8865321245")');
    $this->db->trans_complete();

    if ($this->db->trans_status() === FALSE)
    {
        $this->db->trans_rollback();
        echo 'something bad happened';
    }
    else
    {
        $this->db->trans_commit();
        echo 'everything is fine';
    }

}

现在主键8已经存在,因此预期它不应该允许插入第二个查询(这很好)。

它成功回滚了第一个查询,但问题是打印

而不是打印“发生了一些不好的事情”
A Database Error Occurred
Error Number: 1062
Duplicate entry '8' for key 'PRIMARY'
INSERT INTO user VALUES(8,"martin", "8865321245")
Filename: C:\wamp\www\landmark\system\database\DB_driver.php
Line Number: 330

2 个答案:

答案 0 :(得分:3)

如果你这样做

$this->db->trans_complete();

并且

$this->db->trans_commit();

然后它将提交两次交易。

你有2个解决方案:

    $this->db->trans_start();
    $this->db->query('QUERY');
    $this->db->trans_complete();

    if ($this->db->trans_status() === FALSE)
    {
        echo "fail";
    } 

OR

$this->db->trans_begin();
$this->db->query('QUERY...');


if ($this->db->trans_status() === FALSE)
{
    $this->db->trans_rollback();
}
else
{
    $this->db->trans_commit();
}

有关详细信息,请参阅文档; http://www.codeigniter.com/user_guide/database/transactions.html

答案 1 :(得分:0)

这不是转换问题......

试一试:

function fn_insert_user() {

    $this->db->trans_begin();
    $this->db->query('INSERT INTO user VALUES("john", "9865321245")');
    $this->db->query('INSERT INTO user VALUES("martin", "8865321245")');
    $this->db->trans_complete();

    if ($this->db->trans_status() === FALSE)
    {
        $this->db->trans_rollback();
        echo 'something bad happened';
    }
    else
    {
        $this->db->trans_commit();
        echo 'everything is fine';
    }

}