「CodeIgniter」-怎麼做到「如果其中一個SQL命令執行失敗,則回滾已操作的命令」?-Transaction

在開始接觸開發以前,就聽說過轉帳系統會碰到這樣一個情況:

假設有一個表,有User以及Money兩個字段,Money設置上限為2億。

User A 轉帳10億給User B,那我們如果直接寫SQL,

那麼我們可能會先檢查User A有沒有100億,然後將User A的money減去10億,然後將User B的money增加10億。

我們可能碰到一個情況,在將User A的Money減去10億以後,發現User B的Money如果增加10億,則會超過上限。

但是我們已經操作了”將User A 的Money減去10億“,然後執行”User B的Money增加10億才報錯

這樣就出大問題了。

 

查閱了資料,為了防止這樣的情況出現,會需要用到回滾(roll back)這樣的操作,在執行一系列SQL語句過程中,如果發生錯誤,則回滾已經執行的內容。

 

CodeIgniter Transaction的使用:

$this->db->trans_start();
$this ->db -> insert(‘user’,$i_data);
$this -> db ->insert(‘score’,$i_data2);
$this->db->trans_complete();

如果insert score的時候發生了問題,則已經執行的inser user會回滾。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *