2011-12-08 26 views
1

如果我使用PDO事務,是否需要鎖定表?PDO交易?

如果用戶a有50個錢並將50轉移給用戶b,那麼PDO交易是否確保他們都能正常執行?

此外,如果說我有一個if語句一樣,

if ($user['money'] > 500) { 
    $dbc ->beginTransaction(); 
    ......... 
    $dbc ->commit(); 
} 

我怎樣才能確保在交易運行的用戶的錢不會改變意味着查詢不能運行,值?? 謝謝

回答

1

交易過程由SQL服務器保證。如果beginTransaction()成功,commit()成功並且您的SQL服務器和表支持事務,那麼您可以確定它。

1

PDO是一個抽象層,因此它取決於您的數據庫。 MySQL支持事務,但僅支持InnoDB表。否則只有表鎖(這是不一樣的)。 SQLite總是支持事務。另一個數據庫可能從不

交易仍然需要您(開發人員)創建和驗證邏輯。數據庫不知道什麼是正確的(正確的,不只是)和錯誤的(錯誤的)。你這樣做,所以你必須創建一個腳本,在適當的時候調用BEGIN和COMMIT/ROLLBACK。

另外值得注意的是:事務在數據庫錯誤後不會自動ROLLBACKed。 (也許有些數據庫或DBAL可以,但它不是標準的,你不應該依賴它。)這意味着你必須檢查每個查詢的結果/響應/反饋並適當地採取行動(例如通過調用ROLLBACK)。