基本原理和步驟其實都是一樣的(可參看上一篇“MySQL的事務處理”),PDO中的事務處理就是調用PDO對象的三個方法: 開啟事務:beginTransaction 回滾操作:rollBack 執行操作:commit 事務處理最典型的就是借還錢。下麵以張三向李四還1000元為例 首先看一下資料庫中各自 ...
基本原理和步驟其實都是一樣的(可參看上一篇“MySQL的事務處理”),PDO中的事務處理就是調用PDO對象的三個方法:
開啟事務:beginTransaction
回滾操作:rollBack
執行操作:commit
事務處理最典型的就是借還錢。下麵以張三向李四還1000元為例
首先看一下資料庫中各自的錢數
下麵是利用PDO處理還錢事務的代碼:
<?php /** * 利用PDO對象實現事物操作 */ echo "<meta charset=utf-8>"; //PDO類的實例化 // 1 設置數據源相關參數 $dbms = 'mysql'; //選擇資料庫類型 $host = 'localhost'; $port = '3306'; $dbname = 'test'; $charset = 'utf8'; $dsn = "$dbms:host=$host;port=$port;dbname=$dbname;charset=$charset"; // 2 設置用戶名密碼 $user = 'root'; $pwd = ''; // 3 實例化PDO類 $pdo = new PDO($dsn,$user,$pwd); // 4 PDO事務物操作 // 4.1 開啟事務 $pdo->beginTransaction(); //設置一個變數,用來判斷所有sql語句是否成功 $flag = true; // 4.2 執行事務中的一組sql語句 $sql = "update pdo set money=money+1000 where name='李四'"; $res = $pdo->exec($sql); if (!$res) { //如果sql語句執行失敗,把$flag設置為false; $flag=false; } $sql = "update pdo set money=money-1000 where name='張三'"; $res = $pdo->exec($sql); if (!$res) { //如果sql語句執行失敗,把$flag設置為false; $flag=false; } // 4.3 判斷事務是否執行成功 if ($flag) { //所有sql語句執行成功,把sql語句提交 $pdo->commit(); echo "還錢成功!"; }else{ // 如其中一條執行失敗,則回滾到事務開啟之前的狀態 $pdo->rollback(); echo "還錢失敗!"; }
結果:
下麵,我們故意把其中一個欄位寫錯,看看事務是否正常處理,資料庫中的錢數是否有變化!
// 4.2 執行事務中的一組sql語句 $sql = "update pdo set mone = money+1000 where name='李四'"; //把moeny欄位錯寫成mone
結果:
結果是還錢失敗,並且資料庫中各自的錢數沒有變化,說明當某一條語句未執行成功時,事務不會提交,而會回滾,把數據恢復到開始事務之前的原始狀態,這也是使用事務的作用,即只有當事務中所有sql語句全部執行成功,事務才會提交,否則會回滾!
PDO中使用事務和在MySQL中使用事務原理基本一樣!