深圳市金黑网络技术有限公司始终坚持以用户需求为导向,提供安全、稳定、高效的产品和服务!
签到 · 搜索导航 · 服务热线 · 微信/手机:17817817816

深圳网站建设

开启左侧

php教程使用PDO操作事务

[复制链接]
发表于 2022-12-10 18:13:09 | 486 | 0 | 显示全部楼层 |阅读模式
php教程使用PDO操作事务

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

  5. insert into bank values ('1001',1000),('1002',1)
复制代码
PDO操作事务
  1. <body>
  2. <?php
  3. if(!empty($_POST)){
  4.     $dsn='mysql:dbname=data;charset=utf8';
  5.     $pdo=new PDO($dsn,'root','root');
  6.     $out=$_POST['card_out'];    //转出卡号
  7.     $in=$_POST['card_in'];      //注入卡号
  8.     $money=$_POST['money'];     //金额
  9.     $pdo->beginTransaction();   //开启事务
  10.     //转账
  11.     $flag1=$pdo->exec("update bank set balance=balance-$money where cardid='$out'");
  12.     $flag2=$pdo->exec("update bank set balance=balance+$money where cardid='$in'");
  13.     //查看转出的账号是否大于0,大于0返回true,否则返回false
  14.     $stmt=$pdo->query("select balance from bank where cardid='$out'");
  15.     $flag3=$stmt->fetchColumn()>=0?1:0;
  16.    
  17.     if($flag1 && $flag2 && $flag3){
  18.         $pdo->commit ();    //提交事务
  19.         echo '转账成功';
  20.     }
  21.     else{
  22.         $pdo->rollBack ();  //回滚事务
  23.         echo '转账失败';
  24.     }
  25. }
  26. ?>
  27. <form action="" method="post">
  28.     转出卡号: <input type="text" name="card_out" id=""> <br>
  29.     转入卡号: <input type="text" name="card_in" id=""> <br>
  30.     金额:<input type="text" name="money" id=""> <br>
  31.     <input type="submit" value="提交">
  32. </form>
  33. </body>
复制代码
pdo教程.jpg
  1. $pdo->beginTransaction()        开启事务
  2. $pdo->commit ()                        提交事务
  3. $pdo->rollBack()                        回滚事务
复制代码

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

快速回复 返回顶部 返回列表