php CI 架構 mysql 事務使用

來源:互聯網
上載者:User

標籤:

php CI 文檔地址 http://codeigniter.org.cn/user_guide/index.html

事務

CodeIgniter的資料庫抽象允許你在支援事務安全的資料庫表中使用事務。在MySQL中,你需要用InnoDB或BDB表而不是更常用的MyISAM。大多數其它的資料庫平台都原生支援事務。

如果你對事務不熟悉,我們建議您上網尋找相關資源學習。以下資訊假設你已經明白事務的相關概念。

CodeIgniter 的事務方法

CodeIgniter 使用的事務方法與流行的資料庫類ADODB所使用的處理過程非常相似。我們選擇那種方法是因為它極大地簡化了運行事務的處理過程。大多數情況下你只需要編寫兩行代碼就行了。

傳統上, 事務需要實現大量工作, 他們要求你隨時跟蹤你的查詢, 並根據查詢的成功或失敗來決定 提交 還是 復原。這是特別麻煩的巢狀查詢。相比之下, 我們實現了一種智能的事務系統, 它將自動地為你做這些事情(如果你選擇手動管理你的事務, 這也是可以的, 但這確實沒什麼好處)。

運行事務

要使用事務來運行你的查詢, 你可以使用如下所述的 $this->db->trans_start() 和 $this->db->trans_complete() 函數:

$this->db->trans_start();
$this->db->query(‘一條SQL查詢...‘);
$this->db->query(‘另一條查詢...‘);
$this->db->query(‘還有一條查詢...‘);
$this->db->trans_complete();

在 start/complete 函數之間, 你想運行多少條查詢都可以, 根據任何給定查詢的成功或失敗, 它們將被提交或者復原。

strict 模式(Strict Mode)

預設情況下, CodeIgniter 以strict 模式運行所有事務。當strict 模式被啟用時, 如果你正在運行多組的事務, 只要有一組失敗, 所有組都會被復原。如果strict 模式被禁用, 每一組都被視為獨立的組, 這意味著其中一個組的失敗不會影響其它組。

strict 模式能以下面的方式禁用:

$this->db->trans_strict(FALSE);

管理錯誤資訊

如果你在你的 config/database.php 檔案中啟用了錯誤報表, 當提交沒有成功時, 你會看到一條標準的錯誤資訊。如果調試被關閉, 你可以通過這種方式來管理你的錯誤資訊:

$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)
{
    // 產生一條錯誤資訊... 或者使用 log_message() 函數來記錄你的錯誤資訊
}

禁用事務

當你使用 $this->db->trans_start() 時, 事務就已經被自動啟用了。如果你想要禁用事務, 你可以使用 $this->db->trans_off() 來實現:

$this->db->trans_off()

$this->db->trans_start();
$this->db->query(‘AN SQL QUERY...‘);
$this->db->trans_complete();

當事務被禁用的時候, 你的查詢將被自動認可, 就像沒有使用事務時那樣。

測試模式(Test Mode)

你可以選擇性地將事務系統設定到 "測試模式" , 這將導致你的查詢被復原 -- 儘管查詢會產生有效結果。要使用測試模式, 只需將 $this->db->trans_start() 函數的第一個參數設定為 TRUE 即可:

$this->db->trans_start(TRUE); // 查詢將被復原
$this->db->query(‘AN SQL QUERY...‘);
$this->db->trans_complete();

手動運行事務

如果你想要手動運行事務, 可以使用下面的方法:

$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();
}

說明: 手動運行事務時, 請務必使用 $this->db->trans_begin() 函數, 而不是 $this->db->trans_start().

 

php CI 架構 mysql 事務使用

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.