Codeigniter:mysql事务和affected_rows

时间:2011-08-08 11:36:43

标签: mysql codeigniter transactions rows-affected

我需要进行多次插入/更新,因此如果出现任何问题,我会提交回滚事务。此外,我的应用程序应该更新记录(如果已存在),如果没有则插入。

首先,我尝试使用唯一ID更新记录,如果它返回affected_rows = 0,我继续插入。

可能我会错过事务/受影响行中的某些内容,它总是会返回affected_rows = 0。

以下是代码:

$this->db->trans_start();

   $this->db->where('order_id', $order_id);
   $this->db->where('order_status', 'Active');
   $this->db->update('orders', $order);

   $this->db->where('order_id', $order_id);
   $this->db->where('sku', $item_sku);
   $this->db->update('order_items', $order_items);

$this->db->trans_complete();

if ($this->db->affected_rows()==0){
   $this->db->trans_start();
       $this->db->insert('orders', $order);
       $this->db->insert('order_items', $order_items);
   $this->db->trans_complete();
}

提前致谢!

1 个答案:

答案 0 :(得分:2)

我使用MySQL的ON DUPLICATE KEY UPDATE来处理这种情况。但是,CodeIgniter的ActiveRecord实现本身不支持这个,并且在这个帖子中接受了答案:

How would I use ON DUPLICATE KEY UPDATE in my CodeIgniter model?

似乎已经死了。因此,考虑使用原始MySQL而不是ActiveRecord模式;这在CI开发人员中相当普遍(我不使用他们的AR实现)。