我的事务代码是否导致lock_wait_timeout错误?

时间:2016-08-25 07:13:35

标签: php mysql codeigniter transactions

因为在codeigniter中有两种可能的实现事务的方法:

  

1.自动

     

2.manual

在我的codeigniter应用程序中

I am getting an error like :Lock_wait_timeout。我的代码中没有任何错误的查询。但我发现我已经为自动交易编写了类似于手工交易的交易代码。

因为自动事务使用trans_start(),另一方面手动事务使用trans_begin()。

对于手动事务,codeigniter使用以下语法

$this->db->trans_begin();
insert query...
update query...

if($this->db->trans_status()===FALSE){

   $this->db->trans_rollback();
}else{
   $this->db->trans_commit();
}

但我在我的代码中使用了自动事务,并将其写成如下所示(如果是其他语句,如手动事务使用):

 $this->db->trans_start();
    insert query...
    update query...
 $this->db->trans_complete();
    if($this->db->trans_status()===FALSE){

       $this->db->trans_rollback();
    }else{
       $this->db->trans_commit();
    }

1 个答案:

答案 0 :(得分:1)

函数trans_complete()几乎与if / else语句完全相同,因为它会根据需要调用trans_rollback()trans_commit()。毫无疑问,您第二次尝试提交或回滚会使您的数据库大为混乱。只需删除你的if / else,一切都应该是好的。