php+mysql交易處理的幾個步驟:
1.關閉自動認可
2.開啟交易處理
3.有異常就自動拋出異常提示再復原
4.開啟自動認可
注意:mysql只有這個InnoDB驅動是支援交易處理的,預設MyIsAM驅動不支援.
下面是執行個體代碼:
| 代碼如下 |
複製代碼 |
<?php try{ $pdo=new pdo("mysql:host=localhost;dbname=mydb", "root", "root", array(PDO::ATTR_AUTOCOMMIT=>0));//最後是關閉自動認可 //$pdo->setAttribute(PDO::ATTR_AUTOCOMMIT, 0);//這個是通過設定屬性方法進行關閉自動認可和上面的功能一樣 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);//開啟異常處理 }catch(PDOException $e){ echo "資料庫連接失敗:".$e->getMessage(); exit; } /* * 交易處理 * * 張三從李四那裡買了一台 2000 元的電腦 * 從張三帳號中扣出 2000元 * 向李四帳號中加入 2000元 * 從商品表中減少一台電腦 * MyIsAM InnoDB */ try{ $pdo->beginTransaction();//開啟交易處理 $price=500; $sql="update zhanghao set price=price-{$price} where id=1"; $affected_rows=$pdo->exec($sql); if(!$affected_rows) throw new PDOException("張三轉出失敗");//那個錯誤拋出異常 $sql="update zhanghao set price=price+{$price} where id=3"; $affected_rows=$pdo->exec($sql); if(!$affected_rows) throw new PDOException("向李四轉入失敗"); echo "交易成功!"; $pdo->commit();//交易成功就提交 }catch(PDOException $e){ echo $e->getMessage(); $pdo->rollback(); } $pdo->setAttribute(PDO::ATTR_AUTOCOMMIT, 1);//自動認可,如果最後不自動認可,轉賬是不成功的 //設定錯誤報表模式 ERRMODE_SILENT ERRMODE_WARNING |