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

    基本原理和步骤其实都是一样的(可参看上一篇“MySQL的事务处理”),PDO中的事务处理就是调用PDO对象的三个方法:

    开启事务:beginTransaction

    回滚操作:rollBack

    执行操作:commit

    事务处理最典型的就是借还钱。下面以张三向李四还1000元为例

    首先看一下数据库中各自的钱数

    下面是利用PDO处理还钱事务的代码:

    <?php 
    
    /**
    * 利用PDO对象实现事物操作
    */
    
    echo "<meta charset=utf-8>";
    
    //PDO类的实例化
    
    // 1 设置数据源相关参数
    $dbms = 'mysql';    //选择数据库类型
    $host = 'localhost';
    $port = '3306';
    $dbname = 'test';
    $charset = 'utf8';
    $dsn = "$dbms:host=$host;port=$port;dbname=$dbname;charset=$charset";
    
    // 2 设置用户名密码
    $user = 'root';
    $pwd = '';
    
    // 3 实例化PDO类
    $pdo = new PDO($dsn,$user,$pwd);
    
    // 4 PDO事务物操作
    // 4.1 开启事务
    $pdo->beginTransaction();
    //设置一个变量,用来判断所有sql语句是否成功
    $flag = true;
    
    // 4.2 执行事务中的一组sql语句
    $sql = "update pdo set money=money+1000 where name='李四'";
    $res = $pdo->exec($sql);
    
    if (!$res) {
        //如果sql语句执行失败,把$flag设置为false;
        $flag=false;
    }
    $sql = "update pdo set money=money-1000 where name='张三'";
    $res = $pdo->exec($sql);
    
    if (!$res) {
        //如果sql语句执行失败,把$flag设置为false;
        $flag=false;
    }
    
    // 4.3 判断事务是否执行成功
    if ($flag) {
        //所有sql语句执行成功,把sql语句提交
        $pdo->commit();
        echo "还钱成功!";
    }else{
        // 如其中一条执行失败,则回滚到事务开启之前的状态
        $pdo->rollback();
        echo "还钱失败!";
    }

    结果:

    下面,我们故意把其中一个字段写错,看看事务是否正常处理,数据库中的钱数是否有变化!

    // 4.2 执行事务中的一组sql语句
    $sql = "update pdo set mone = money+1000 where name='李四'";  //把moeny字段错写成mone

    结果:

     

    结果是还钱失败,并且数据库中各自的钱数没有变化,说明当某一条语句未执行成功时,事务不会提交,而会回滚,把数据恢复到开始事务之前的原始状态,这也是使用事务的作用,即只有当事务中所有sql语句全部执行成功,事务才会提交,否则会回滚!

     PDO中使用事务和在MySQL中使用事务原理基本一样!

  • 相关阅读:
    提升ASP.NET性能
    人性的弱点
    墨菲定律
    沟通
    网站
    程序员思维模式
    CSS
    HTML
    路由和数据传递(04)
    Sql Server中查看所有数据库,表名,字段名以及字段类型
  • 原文地址:https://www.cnblogs.com/zxf100/p/6820536.html
Copyright © 2011-2022 走看看