色尼玛亚洲综合影院,亚洲3atv精品一区二区三区,麻豆freexxxx性91精品,欧美在线91

Codeigniter框架的更新事務(transaction)BUG及解決方法

由于ci事務判斷出錯回滾的條件是語句是否執(zhí)行成功,而更新操作時,就算影響的條數(shù)為0,sql語句執(zhí)行的結果過仍然為1,因為它執(zhí)行成功了,只是影響的條數(shù)為0。

下面介紹解決這個問題的方法:

對于一次要執(zhí)行許多的語句的事務

只需在更新操作下根據(jù)影響條數(shù)是否為0來決定是否會滾即可,下面假設第二條語句為更新操作。

復制代碼 代碼如下:
//采用 Codeigniter 事務的手動模式
    $this->db->trans_strict(FALSE);
    $this->db->trans_begin();
       
    $this->db->query('SELECT ...');//SELECT 操作無需特殊處理
    $this->db->query('INSERT ...');//INSERT 出錯會有 Codeigniter 自動處理
       
    $this->db->query('UPDATE ...');
    if (!$this->db->affacted_rows()) {//上面的 UPDATE 失敗則回滾
        $this->db->trans_rollback();
        //@todo 異常處理部分
        exit();//需要終止或跳出,以免下面的 SQL 代碼繼續(xù)執(zhí)行!
    }
       
    $this->db->query('DELETE ...');
    if (!$this->db->affacted_rows()) {//上面的 DELETE 失敗則回滾
        $this->db->trans_rollback();
        //@todo 異常處理部分
        exit();//需要終止或跳出,以免下面的 SQL 代碼繼續(xù)執(zhí)行!
    }
       
    $this->db->query('SELECT ...');//SELECT 操作無需特殊處理
    $this->db->query('INSERT ...');//INSERT 出錯會有 Codeigniter 自動處理
       
    if ($this->db->trans_status() === TRUE) {
        $this->db->trans_commit();
    } else {
        $this->db->trans_rollback();
        //@todo 異常處理部分
    }

如果一次執(zhí)行的語句不是很多,可以在最后做一下判斷來決定回滾

若語句中沒有更新操作,用自動事務就可以。

php技術Codeigniter框架的更新事務(transaction)BUG及解決方法,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 上思县| 阜新| 沭阳县| 满洲里市| 申扎县| 阜城县| 郸城县| 永年县| 蒲城县| 玛沁县| 江北区| 扬州市| 和硕县| 海丰县| 阿拉尔市| 富民县| 衡山县| 江达县| 沙田区| 舞钢市| 岳阳市| 腾冲县| 华宁县| 隆化县| 苏尼特左旗| 读书| 新巴尔虎右旗| 象州县| 繁昌县| 夏津县| 乌兰察布市| 浦城县| 太和县| 濉溪县| 安塞县| 盱眙县| 江永县| 玛纳斯县| 大丰市| 高密市| 凯里市|