标签:
1 <?php 2 $pdo = new PDO("mysql:host=localhost;dbname=demo", "mysql_urer", "mysql_password"); 3 $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); //设置异常处理模式 4 $pdo->setAttribute(PDO::ATTR_AUTOCOMMIT, 0); //关闭自动提交 5 6 /* 使用异常处理试着去执行转账的事务,如果有异常转到catch区块中 */ 7 try { 8 $price = 80; //商品交易价格,也是转账金额 9 $pdo->beginTransaction(); //开始事备 10 11 $affected_rows = $pdo->exec("update account set cash=cash-{$price} where name=‘userA‘"); //转出 12 13 if($affected_rows > 0) 14 echo "userA成功转出{$price}元人民币<br>"; 15 else 16 throw new PDOException(‘userA转出失败‘); //失败抛出异常,不向下再执行,转到catch区块 17 18 $affected_rows = $pdo->exec("update account set cash=cash+{$price} where name=‘userB‘"); //转入 19 20 if($affected_rows > 0) 21 echo "成功向userB转入{$price}元人民币<br>"; 22 else 23 throw new PDOException(‘userB转入失败‘); //失败抛出异常,不向下再执行,转到catch区块 24 25 echo "交易成功!"; 26 $pdo->commit(); //如果执行到此处表示前面两个查询执行成功,整个事务执行成功 27 }catch(PDOException $e){ 28 echo "交易失败:".$e->getMessage(); 29 $pdo->rollback(); //如果执行到此处理表示事务中的语句出问题了, 整个事务全部撤消 30 } 31 32 $pdo->setAttribute(PDO::ATTR_AUTOCOMMIT, 1); //重新开启自动提交 33 34 35
标签:
原文地址:http://www.cnblogs.com/qingxiaoping/p/5003345.html