国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

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

2024-05-04 23:24:32
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了Codeigniter框架的更新事務(transaction)BUG及解決方法,具體BUG和解決辦法在文中有詳細描述,需要的朋友可以參考下
 
 

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

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

對于一次要執行許多的語句的事務

只需在更新操作下根據影響條數是否為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 代碼繼續執行!
    }
        
    $this->db->query('DELETE ...');
    if (!$this->db->affacted_rows()) {//上面的 DELETE 失敗則回滾
        $this->db->trans_rollback();
        //@todo 異常處理部分
        exit();//需要終止或跳出,以免下面的 SQL 代碼繼續執行!
    }
        
    $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 異常處理部分
    }

 

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

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 密山市| 宁乡县| 临朐县| 玛沁县| 隆昌县| 高唐县| 洛隆县| 安新县| 分宜县| 璧山县| 辽阳市| 盘锦市| 乌拉特中旗| 宜州市| 湘潭市| 江川县| 九龙坡区| 扎囊县| 德安县| 延安市| 白朗县| 松滋市| 武安市| 平阳县| 始兴县| 商洛市| 望奎县| 冷水江市| 汾西县| 永州市| 朝阳县| 绥芬河市| 定南县| 抚顺县| 隆尧县| 林州市| 民勤县| 遵化市| 嘉荫县| 广西| 肥乡县|