我正在尝试使用事务更新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; }
}
答案 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;
}
}
答案 1 :(得分:0)
我不知道你的db类是如何工作的,但是可能查询返回false就失败而不抛出Exception,所以trans_complete()也返回false,然后你的函数返回TRUE