因为在codeigniter中有两种可能的实现事务的方法:
在我的codeigniter应用程序中1.自动
2.manual
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();
}
答案 0 :(得分:1)
函数trans_complete()
几乎与if / else语句完全相同,因为它会根据需要调用trans_rollback()
或trans_commit()
。毫无疑问,您第二次尝试提交或回滚会使您的数据库大为混乱。只需删除你的if / else,一切都应该是好的。