PDO 事務處理
阿新 • • 發佈:2017-07-14
intra fec catch 賬號 soft transacti align () 拋出異常
- <?php
- header(‘content-type:text/html;charset=utf-8‘);
- try{
- //最後是關閉自動提交
- $pdo=new pdo("mysql:host=127.0.0.1;dbname=exam", "root", "root");
- //這個是通過設置屬性方法進行關閉自動提交
- $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 goods set good_price=good_price-{$price} where id=3";
- $affected_rows=$pdo->exec($sql);
- if(!$affected_rows)
- throw new PDOException("張三轉出失敗");//那個錯誤拋出異常
- $sql="update goods set good_price=good_price+{$price} where id=1";
- $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
PDO 事務處理