W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
CodeIgniter 的數(shù)據(jù)庫抽象類允許你將事務(wù)和支持事務(wù)安全表類型的數(shù)據(jù)庫一起使用。 在 MySQL 中,你需要將表設(shè)置為 InnoDB 或者 BDB 類型, 而不是更常見的 MyISAM。大多數(shù)的數(shù)據(jù)庫本身支持事務(wù)。
如果你不熟悉事務(wù),我們建議找個好的在線資源學(xué)習(xí)下,了解你正用的數(shù)據(jù)庫。 以下的信息假定你對事務(wù)有基本的了解。
CodeIgniter 采用一種與流行的 ADODB 數(shù)據(jù)庫類很相似的方式處理事務(wù)。 我們選用這種方法因為它極大地簡化了運行事務(wù)的過程。 在大多數(shù)情況下,所需要的只是兩行代碼。
傳統(tǒng)的事務(wù)需要相當(dāng)多的工序才能實現(xiàn),因為它要求你跟蹤查詢并根據(jù)查詢的成功或失敗來決定提交 還是回滾,這在嵌套查詢時尤為麻煩。相比之下,我們已經(jīng)實現(xiàn)了一個智能事務(wù)系統(tǒng),可以自動為你 完成這些工作(如果你想要手動管理你的事務(wù)也可以,但這實際上沒有任何好處)。
要使用事務(wù)運行查詢,你將使用 $this->db->transStart() 和 $this->db->transComplete() 方法,如下所示:
$this->db->transStart();
$this->db->query('AN SQL QUERY...');
$this->db->query('ANOTHER QUERY...');
$this->db->query('AND YET ANOTHER QUERY...');
$this->db->transComplete();
你可以在啟動/完成方法之間運行任意多的查詢,并且根據(jù)任何給定查詢的成功或失敗結(jié)果, 他們都能被提交或回滾。
默認(rèn)情況下,CodeIgniter 以嚴(yán)格模式運行所有事務(wù)。 啟用嚴(yán)格模式時,如果你正在運行多組事務(wù),假如一個組失敗,所有組都將被回滾。 如果禁用嚴(yán)格模式,則會獨立處理每個組,這意味著一個組的失敗不會影響其他組。
可以按如下方式禁用嚴(yán)格模式:
$this->db->transStrict(false);
如果在 Config / Database.php 文件中啟用了錯誤報告,在提交失敗時會看到標(biāo)準(zhǔn)錯誤消息。 如果關(guān)閉調(diào)試,你可以像下面這樣處理自己的錯誤:
$this->db->transStart();
$this->db->query('AN SQL QUERY...');
$this->db->query('ANOTHER QUERY...');
$this->db->transComplete();
if ($this->db->transStatus() === FALSE)
{
// 生成錯誤...或使用 log_message() 函數(shù)記錄錯誤
}
事務(wù)功能是默認(rèn)開啟的,如果要禁用事務(wù),可以執(zhí)行 $this->db->transOff() 操作:
$this->db->transOff();
$this->db->transStart();
$this->db->query('AN SQL QUERY...');
$this->db->transComplete();
禁用事務(wù)時,你的查詢將自動提交,就像平時沒事務(wù)那樣的執(zhí)行查詢。
你可以選擇將事務(wù)系統(tǒng)置于 “測試模式” ,這將導(dǎo)致你的查詢被回滾 – 即使查詢產(chǎn)生有效結(jié)果。要使用測試模式,只需將 $this->db->transStart() 方法的第一個參數(shù)設(shè)置為 TRUE:
$this->db->transStart(true); // 查詢將被回滾
$this->db->query('AN SQL QUERY...');
$this->db->transComplete();
如果你想手動運行事務(wù),可以按如下方式執(zhí)行:
$this->db->transBegin();
$this->db->query('AN SQL QUERY...');
$this->db->query('ANOTHER QUERY...');
$this->db->query('AND YET ANOTHER QUERY...');
if ($this->db->transStatus() === FALSE)
{
$this->db->transRollback();
}
else
{
$this->db->transCommit();
}
注解
確保在手動運行事務(wù)時使用 $this-&db-&transBegin(), 而不是 $this-&db-&transStart()。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: