mysql - Codeigniter:mysql 事务和 affected_rows

标签 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();
}

提前致谢!

最佳答案

我使用 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/

相关文章:

java - Spring @Transactional 多线程

mysql - #1071 - 指定的 key 太长;最大 key 长度为 1000 字节

javascript - 如何使用手机指纹传感器作为生物识别(指纹)扫描仪

php - 如何防止 PHP 中的 SQL 注入(inject)?

jquery - 根据一天中的时间在页面上的不同位置显示对象

php - 如何将值从 Controller 传递到 codeigniter 中查看?

mongodb - Mongoid 中的事务 (MongoDB)

java - 带有 CMT 的 Ejb3 无状态 bean

php - 在数据库中处理每年的时间段的最佳方法是什么?

mysql - 'Array' 中的未知列 'where clause' - 数据库错误