admin 发表于 2020-11-5 13:41

php中PDO操作事务

事务:是一个整体,要么一起执行,要么一起回滚事务的特性:原子性,一致性,隔离性,永久性需要将多个SQL语句作为一个整体执行,就需要使用到事务语法start transaction 或 begin                开启事务
commit        提交事务
rollback        回滚事务例题创建测试数据create table bank(
       cardid char(4) primary key comment '卡号',
       balance decimal(10,2) not null comment '余额'
)engine=innodb charset=utf8 comment '银行卡号表'

insert into bank values ('1001',1000),('1002',1)PDO操作事务<body>
<?php
if(!empty($_POST)){
    $dsn='mysql:dbname=data;charset=utf8';
    $pdo=new PDO($dsn,'root','root');
    $out=$_POST['card_out'];    //转出卡号
    $in=$_POST['card_in'];      //注入卡号
    $money=$_POST['money'];   //金额
    $pdo->beginTransaction();   //开启事务
    //转账
    $flag1=$pdo->exec("update bank set balance=balance-$money where cardid='$out'");
    $flag2=$pdo->exec("update bank set balance=balance+$money where cardid='$in'");
    //查看转出的账号是否大于0,大于0返回true,否则返回false
    $stmt=$pdo->query("select balance from bank where cardid='$out'");
    $flag3=$stmt->fetchColumn()>=0?1:0;
   
    if($flag1 && $flag2 && $flag3){
      $pdo->commit ();    //提交事务
      echo '转账成功';
    }
    else{
      $pdo->rollBack ();//回滚事务
      echo '转账失败';
    }
}
?>
<form action="" method="post">
    转出卡号: <input type="text" name="card_out" id=""> <br>
    转入卡号: <input type="text" name="card_in" id=""> <br>
    金额:<input type="text" name="money" id=""> <br>
    <input type="submit" value="提交">
</form>
</body>小结: $pdo->beginTransaction()        开启事务 $pdo->commit ()                        提交事务 $pdo->rollBack()                        回滚事务
页: [1]
查看完整版本: php中PDO操作事务