我需要进行多次插入/更新,所以我提出了事务以在出现任何问题时回滚。此外,如果记录已经存在,我的应用程序应该更新记录,如果不存在则插入。
所以首先我尝试使用唯一 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();
}
提前致谢!
最佳答案
我使用 MySQL 的 ON DUPLICATE KEY UPDATE
来处理这种情况。但是,CodeIgniter 的 ActiveRecord 实现本身并不支持这一点,并且该线程中接受的答案是:
How would I use ON DUPLICATE KEY UPDATE in my CodeIgniter model?
好像死了。因此,考虑只使用原始 MySQL 而不是 ActiveRecord 模式;这在 CI 开发人员中相当普遍(我不使用他们的 AR 实现)。
关于mysql - Codeigniter:mysql 事务和 affected_rows,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6981517/