码迷,mamicode.com
首页 > 其他好文 > 详细

事物处理

时间:2015-11-28 21:25:44      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:

 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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!