zoukankan      html  css  js  c++  java
  • PDO 事务处理

    1. <?php
    2. header('content-type:text/html;charset=utf-8');
    3. try{
    4. //最后是关闭自动提交
    5. $pdo=new pdo("mysql:host=127.0.0.1;dbname=exam", "root", "root");
    6. //这个是通过设置属性方法进行关闭自动提交
    7. $pdo->setAttribute(PDO::ATTR_AUTOCOMMIT, 0);
    8. //开启异常处理
    9. $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    10. }
    11. catch(PDOException $e){
    12. echo "数据库连接失败:".$e->getMessage();
    13. exit;
    14. }
    15. /*
    16. * 事务处理
    17. *
    18. * 张三从李四那里买了一台 2000 元的电脑
    19. * 从张三帐号中扣出 2000元
    20. * 向李四账号中加入 2000元
    21. * 从商品表中减少一台电脑
    22. * MyIsAM InnoDB
    23. */
    24. try{
    25. $pdo->beginTransaction();//开启事务处理
    26. $price=500;
    27. $sql="update goods set good_price=good_price-{$price} where id=3";
    28. $affected_rows=$pdo->exec($sql);
    29. if(!$affected_rows)
    30. throw new PDOException("张三转出失败");//那个错误抛出异常
    31. $sql="update goods set good_price=good_price+{$price} where id=1";
    32. $affected_rows=$pdo->exec($sql);
    33. if(!$affected_rows)
    34. throw new PDOException("向李四转入失败");
    35. echo "交易成功!";
    36. $pdo->commit();//交易成功就提交
    37. }
    38. catch(PDOException $e){
    39. echo $e->getMessage();
    40. $pdo->rollback();
    41. }
    42. //自动提交,如果最后不自动提交,转账是不成功的
    43. $pdo->setAttribute(PDO::ATTR_AUTOCOMMIT, 1);
    44. //设置错误报告模式 ERRMODE_SILENT ERRMODE_WARNING
  • 相关阅读:
    第二次冲刺阶段第四天
    第二次冲刺阶段第三天
    第二次冲刺阶段第二天
    人月神话阅读笔记03
    第二次冲刺阶段第一天
    学习进度条(十二)
    课堂练习-找水王
    学习进度条(十一)
    学习进度表第十周
    构建之法阅读笔记06
  • 原文地址:https://www.cnblogs.com/lovehx/p/7169189.html
Copyright © 2011-2022 走看看