Codeigniter框架的更新事務(wù)(transaction)BUG及解決方法
由于ci事務(wù)判斷出錯(cuò)回滾的條件是語(yǔ)句是否執(zhí)行成功,而更新操作時(shí),就算影響的條數(shù)為0,sql語(yǔ)句執(zhí)行的結(jié)果過(guò)仍然為1,因?yàn)樗鼒?zhí)行成功了,只是影響的條數(shù)為0。
下面介紹解決這個(gè)問(wèn)題的方法:
對(duì)于一次要執(zhí)行許多的語(yǔ)句的事務(wù)
只需在更新操作下根據(jù)影響條數(shù)是否為0來(lái)決定是否會(huì)滾即可,下面假設(shè)第二條語(yǔ)句為更新操作。
//采用 Codeigniter 事務(wù)的手動(dòng)模式
$this->db->trans_strict(FALSE);
$this->db->trans_begin();
$this->db->query('SELECT ...');//SELECT 操作無(wú)需特殊處理
$this->db->query('INSERT ...');//INSERT 出錯(cuò)會(huì)有 Codeigniter 自動(dòng)處理
$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 操作無(wú)需特殊處理
$this->db->query('INSERT ...');//INSERT 出錯(cuò)會(huì)有 Codeigniter 自動(dòng)處理
if ($this->db->trans_status() === TRUE) {
$this->db->trans_commit();
} else {
$this->db->trans_rollback();
//@todo 異常處理部分
}
如果一次執(zhí)行的語(yǔ)句不是很多,可以在最后做一下判斷來(lái)決定回滾
若語(yǔ)句中沒(méi)有更新操作,用自動(dòng)事務(wù)就可以。
- apache+codeigniter 通過(guò).htcaccess做動(dòng)態(tài)二級(jí)域名解析
- CI框架給視圖添加動(dòng)態(tài)數(shù)據(jù)
- Cisco 路由器動(dòng)態(tài)和靜態(tài)地址轉(zhuǎn)換
- CI(CodeIgniter)框架中的增刪改查操作
- 在CODEIGNITER中 在CI中引入外部的JS與CSS呢
- Codeigniter(CI)框架分頁(yè)函數(shù)及相關(guān)知識(shí)
- CI(CodeIgniter)框架介紹
- CI(CodeIgniter)框架配置
- CodeIgniter模板引擎使用實(shí)例
- php之CodeIgniter學(xué)習(xí)筆記
- Codeigniter注冊(cè)登錄代碼示例
- 解析CodeIgniter自定義配置文件
- 基于Codeigniter框架實(shí)現(xiàn)的student信息系統(tǒng)站點(diǎn)動(dòng)態(tài)發(fā)布功能詳解
相關(guān)文章
PHP實(shí)現(xiàn)手機(jī)歸屬地查詢API接口實(shí)現(xiàn)代碼
主要使用curl實(shí)現(xiàn),需要開(kāi)啟php對(duì)curl的支持2012-08-08php安裝擴(kuò)展mysqli的實(shí)現(xiàn)步驟及報(bào)錯(cuò)解決辦法
這篇文章主要介紹了 php安裝擴(kuò)展mysqli的實(shí)現(xiàn)步驟及報(bào)錯(cuò)解決辦法的相關(guān)資料,希望通過(guò)本文能幫助到大家,需要的朋友可以參考下2017-09-09php中過(guò)濾非法字符的具體實(shí)現(xiàn)
非法字符過(guò)濾在某些情況下還是很有必要的,接下來(lái)為大家介紹下php中時(shí)如何實(shí)現(xiàn)的,感興趣的朋友不要錯(cuò)過(guò)2013-10-10thinkphp5.1 框架導(dǎo)入/導(dǎo)出excel文件操作示例
這篇文章主要介紹了thinkphp5.1 框架導(dǎo)入/導(dǎo)出excel文件操作,結(jié)合實(shí)例形式分析了thinkphp5.1 框架導(dǎo)入/導(dǎo)出excel文件具體操作實(shí)現(xiàn)技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下2020-05-05