事务没有返回错误信息

时间:2015-01-28 10:33:38

标签: php mysql codeigniter

我正在尝试使用事务更新3个表,如果任何一个失败我需要回滚所有表。对于一个表,外键约束失败,但它不返回false语句,而是显示数据库的控制台错误。回滚正在运行。我在下面提供了我的代码。请帮助。 下面的函数帮助我执行一些查询     

    function funcname($val1,$val2,$val3){
            $this->db->trans_start();//starting transaction
            try { // trying to execute query
                $this->db->query("UPDATE tab1 SET name = 1 WHERE id=".$val1);
                $this->db->query("UPDATE school SET emp = 2 WHERE id=".$val2);
                $this->db->query("UPDATE profile SET status = 4 WHERE id=".$val3);
                $this->db->trans_complete();
                return TRUE;
            } catch (Exception $ex) { //exception roll back to original state
                $this->db->trans_rollback();
                return FALSE;
            }
}

2 个答案:

答案 0 :(得分:1)

如果您使用trans_start()trans_complete(),则无需使用try catch语句。你的功能就是这样。

function funcname($val1,$val2,$val3){
        $this->db->trans_start();//starting transaction
        $this->db->query("UPDATE tab1 SET name = 1 WHERE id=".$val1);
        $this->db->query("UPDATE school SET emp = 2 WHERE id=".$val2);
        $this->db->query("UPDATE profile SET status = 4 WHERE id=".$val3);
        $this->db->trans_complete();
        if ($this->db->trans_status() === FALSE)
        {
            return FALSE;
        }
        else
        {
            return TRUE;
        }
    }

如果您需要手动执行,请使用下面的代码

function funcname($val1,$val2,$val3){
        $this->db->trans_begin();//starting transaction
        $this->db->query("UPDATE tab1 SET name = 1 WHERE id=".$val1);
        $this->db->query("UPDATE school SET emp = 2 WHERE id=".$val2);
        $this->db->query("UPDATE profile SET status = 4 WHERE id=".$val3);
        if ($this->db->trans_status() === FALSE)
        {
            $this->db->trans_rollback();
            return FALSE;
        }
        else
        {
            $this->db->trans_commit();
            return TRUE;
        }
    }

了解更多参考资料Transactions : CodeIgniter User Guide

答案 1 :(得分:0)

我不知道你的db类是如何工作的,但是可能查询返回false就失败而不抛出Exception,所以trans_complete()也返回false,然后你的函数返回TRUE

相关问题