【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中使用事务原理基本一样!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

下页、再停留

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值