国产探花免费观看_亚洲丰满少妇自慰呻吟_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 異常處理部分
    }

 

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

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 龙南县| 正蓝旗| 灵寿县| 襄汾县| 肥城市| 郓城县| 光山县| 东源县| 威宁| 长沙市| 莱州市| 凤庆县| 化德县| 中西区| 清新县| 连州市| 上蔡县| 梅州市| 六枝特区| 杭锦后旗| 宜宾县| 高雄市| 吉木萨尔县| 永泰县| 上杭县| 河东区| 肇东市| 长白| 普格县| 常山县| 蓝田县| 连云港市| 津南区| 南丰县| 德江县| 钟山县| 宝兴县| 洞口县| 顺昌县| 宝应县| 云龙县|