php入门pdo的使用--事务处理

通过pdo事务来实现一个转账的例子:

<?php
    include("pdo.php");
    try{
        //0表示取消自动提交
        $pdo -> setAttribute(PDO::ATTR_AUTOCOMMIT,0);
        $pdo -> beginTransaction();
        $sql = "UPDATE cash SET money = money - 50 WHERE username = 'lilei'";
        $affectedRow = $pdo -> exec($sql);
        if(!$affectedRow){
            throw new PDOException("转出失败");
        }
        $sql = "UPDATE cash SET money = money +50 WHERE username = 'hanmeimei' ";
        $affectedRow = $pdo -> exec($sql);
        if(!$affectedRow){
            throw new PDOException("转出失败");
        }
        $pdo -> commit();
        echo "汇款成功";
    }
    catch(PDOException $e){
        $pdo -> rollback();
        $e -> getMessage();
        $e -> getLine();
        $e -> getCode();
        $e -> getFile();
    }
    $pdo -> setAttribute(PDO::ATTR_AUTOCOMMIT,1);
?>

初始数据:

《php入门pdo的使用--事务处理》 lilei,hanmeimei拥有的现金

执行一次程序后:

《php入门pdo的使用--事务处理》 执行结果

查看数据库信息:

《php入门pdo的使用--事务处理》 执行成功后的结果

若将上述代码中lilei的名字故意写错:
会触发异常并回滚:

《php入门pdo的使用--事务处理》 异常信息

查看数据库,发现已经回滚:

《php入门pdo的使用--事务处理》 数据并没有变化

    原文作者:joooooe
    原文地址: https://www.jianshu.com/p/f50e4e50dc40
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞