W3Cschool
恭喜您成為首批注冊(cè)用戶(hù)
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
CodeIgniter 允許你在支持事務(wù)安全的表上使用事務(wù)。在 MySQL 中,你需要將 表的存儲(chǔ)引擎設(shè)置為 InnoDb 或 BDB,而不是通常我們使用的 MyISAM 。大多數(shù) 其他數(shù)據(jù)庫(kù)平臺(tái)都原生支持事務(wù)。
如果你對(duì)事務(wù)還不熟悉,我們推薦針對(duì)你正在使用的數(shù)據(jù)庫(kù),先在網(wǎng)上尋找一些 在線資源學(xué)習(xí)一下。下面將假設(shè)你已經(jīng)明白事務(wù)的基本概念。
CodeIgniter 使用的事務(wù)處理方法與流行的數(shù)據(jù)庫(kù)類(lèi) ADODB 的處理方法非常相似。 我們選擇這種方式是因?yàn)樗鼧O大的簡(jiǎn)化了事務(wù)的處理過(guò)程。大多數(shù)情況下,你只需 編寫(xiě)兩行代碼就行了。
傳統(tǒng)的事務(wù)處理需要實(shí)現(xiàn)大量的工作,你必須隨時(shí)跟蹤你的查詢(xún),并根據(jù)查詢(xún)的成功 或失敗來(lái)決定提交還是回滾。當(dāng)遇到嵌套查詢(xún)時(shí)將會(huì)更加麻煩。相比之下,我們實(shí)現(xiàn)了 一個(gè)智能的事務(wù)系統(tǒng),它將自動(dòng)的為你做這些工作。(你仍然可以選擇手工管理你的 事務(wù),但這實(shí)在是沒(méi)啥好處)
要使用事務(wù)來(lái)運(yùn)行你的查詢(xún),你可以使用 $this->db->trans_start() 和 $this->db->trans_complete() 兩個(gè)方法,像下面這樣:
$this->db->trans_start();
$this->db->query('AN SQL QUERY...');
$this->db->query('ANOTHER QUERY...');
$this->db->query('AND YET ANOTHER QUERY...');
$this->db->trans_complete();
在 start 和 complete 之間,你可以運(yùn)行任意多個(gè)查詢(xún),根據(jù)查詢(xún)執(zhí)行 成功或失敗,系統(tǒng)將自動(dòng)提交或回滾。
CodeIgniter 默認(rèn)使用嚴(yán)格模式運(yùn)行所有的事務(wù),在嚴(yán)格模式下,如果你正在 運(yùn)行多組事務(wù),只要有一組失敗,所有組都會(huì)被回滾。如果禁用嚴(yán)格模式,那么 每一組都被視為獨(dú)立的組,這意味著其中一組失敗不會(huì)影響其他的組。
嚴(yán)格模式可以用下面的方法禁用:
$this->db->trans_strict(FALSE);
如果你的數(shù)據(jù)庫(kù)配置文件 config/database.php 中啟用了錯(cuò)誤報(bào)告(db_debug = TRUE), 當(dāng)提交沒(méi)有成功時(shí),你會(huì)看到一條標(biāo)準(zhǔn)的錯(cuò)誤信息。如果沒(méi)有啟用錯(cuò)誤報(bào)告, 你可以像下面這樣來(lái)管理你的錯(cuò)誤:
$this->db->trans_start();
$this->db->query('AN SQL QUERY...');
$this->db->query('ANOTHER QUERY...');
$this->db->trans_complete();
if ($this->db->trans_status() === FALSE)
{
// generate an error... or use the log_message() function to log your error
}
當(dāng)執(zhí)行 $this->db->trans_start() 方法時(shí),事務(wù)將自動(dòng)啟用,如果 你要禁用事務(wù),可以使用 $this->db->trans_off() 方法來(lái)實(shí)現(xiàn):
$this->db->trans_off();
$this->db->trans_start();
$this->db->query('AN SQL QUERY...');
$this->db->trans_complete();
當(dāng)事務(wù)被禁用時(shí),你的查詢(xún)會(huì)自動(dòng)提交,就跟沒(méi)有使用事務(wù)一樣。
你可以選擇性的將你的事務(wù)系統(tǒng)設(shè)置為 “測(cè)試模式”,這將導(dǎo)致你的所有 查詢(xún)都被回滾,就算查詢(xún)成功執(zhí)行也一樣。要使用 “測(cè)試模式”,你只需要 將 $this->db->trans_start() 函數(shù)的第一個(gè)參數(shù)設(shè)置為 TRUE 即可:
$this->db->trans_start(TRUE); // Query will be rolled back
$this->db->query('AN SQL QUERY...');
$this->db->trans_complete();
如果你想手工運(yùn)行事務(wù),可以像下面這樣做:
$this->db->trans_begin();
$this->db->query('AN SQL QUERY...');
$this->db->query('ANOTHER QUERY...');
$this->db->query('AND YET ANOTHER QUERY...');
if ($this->db->trans_status() === FALSE)
{
$this->db->trans_rollback();
}
else
{
$this->db->trans_commit();
}
注解
手動(dòng)運(yùn)行事務(wù)時(shí),請(qǐng)務(wù)必使用 $this->db->trans_begin() 方法, 而不是 $this->db->trans_start() 方法。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話(huà):173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: