複数の挿入/更新が必要なので、何か問題が発生した場合にロールバックするトランザクションを思いつきました。また、私のアプリケーションはレコードがすでに存在する場合は更新し、そうでない場合は挿入します。Codeigniter:mysql transactionとaffected_rows
まず最初にunique_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();
}
ありがとう!
あなたの助けを頼りにしてカイル!デッドスレッドは、[link](http://web.archive.org/web/20090221091226/http://codeigniter.com/forums/viewthread/80958/)からアクセスできます。とにかくまっすぐなクエリは、トリックを行うので、私はこのソリューションを使用します!しかし、もし私がそれを必要とするなら、重複したキー更新は、いくつかの行だけで実行されます。例えばWHERE foo = '1'? – Luciano
条件文には手がかりがありません。申し訳ありません。 –