PHP使用pdo实现事务处理操作示例
发布:smiling 来源: PHP粉丝网 添加日期:2018-09-14 10:50:58 浏览: 评论:0
本文实例讲述了PHP使用pdo实现事务处理操作。分享给大家供大家参考,具体如下:
使用事务的好处:
举个例子:银行用户A向用户B转账100元,这个操作被分为两个步骤:
(1)A的账户余额被扣去100。
(2)B的账户余额增加100。
如果不使用事务的话,假设(1)执行成功了,而(2)失败了,那用户B没有收到应收款项,而用户A就白白受了损失。
使用事务之后,不论(1)或者(2)哪一步失败,都可以回滚,即双方的账户余额恢复到之前的状态。
不是所有的数据库都提供了对事务的支持,如mysql中的 Myisam 引擎不支持事务,但新版本默认使用的 innoDB 引擎提供了对事务的支持。(RDBMS大部分支持事务,NoSQL数据库一般不支持事务)
下面来看具体的代码:
- <?php
- $dsn = "mysql:dbname=pdo;host=localhost";
- $user = "root";
- $password = "root";
- $dbh = new PDO($dsn, $user, $password);
- //使用事务之前,要先关闭自动提交。不关闭的话,出现异常的时候没法回滚。
- //据手册描述,ATTR_AUTOCOMMIT属性只在mysql,OCI(oracle),firebird三种数据库中可用
- $dbh->setAttribute(PDO::ATTR_AUTOCOMMIT, 0);
- $cash = 100;
- try {
- $dbh->beginTransaction();
- //用户A账户扣除100
- $sqlcmd = "update transaction set useraccount=useraccount - {$cash} where username ='A'";
- $affected_rows = $dbh->exec($sqlcmd);
- if ($affected_rows > 0) {
- echo "用户A账户扣除成功" . "<br>";
- } else {
- throw new Exception("用户A账户扣除失败");
- }
- //用户B账户增加100
- $affected_rows = $dbh->exec("update transaction set useraccount=useraccount+{$cash} where username ='B'");
- if ($affected_rows > 0) {
- echo "用户B账户增加成功" . "<br>";
- } else {
- throw new Exception("用户B账户增加失败");
- }
- echo "转账成功";
- //若前面两个步骤都成功,则提交事务
- $dbh->commit();
- } //phpfensi.com
- catch (PDOException $e) //若前面两个步骤中出现了异常,则回滚
- {
- echo $e->getMessage();
- $dbh->rollback();
- }
- //对事物的使用结束之后,重新开启自动提交
- $dbh->setAttribute(PDO::ATTR_AUTOCOMMIT, 1);
- ?>
Tags: 示例 事务
相关文章
- ·PHP中的cURL请求及示例学习笔记(2014-07-03)
- ·php计划任务示例详解(2014-07-12)
- ·php XMLWriter类的简单示例(2014-08-20)
- ·PHP编程实现的TCP服务端和客户端功能示例(2018-06-06)
- ·使用PHP访问RabbitMQ消息队列的方法示例(2018-06-11)
- ·php PDO实现的事务回滚示例(2018-08-29)
- ·Python实现文件内容批量追加的方法示例(2018-08-31)
- ·利用PHP实现开心消消乐的算法示例(2018-09-09)
- ·PHP memcache在微信公众平台的应用方法示例(2018-09-13)
- ·PHP服务器端API原理及示例讲解(接口开发)(2018-09-14)
- ·php apidoc生成接口文档示例(2018-09-19)
- ·PHP实现多个关键词搜索查询功能示例(2018-10-11)
- ·Laravel框架路由设置与使用示例(2018-10-19)
- ·PHP简单实现定时监控nginx日志文件功能示例(2018-10-19)
- ·PHP设计模式之装饰器模式定义与用法简单示例(2018-10-19)
- ·php实现memcache缓存示例讲解(2020-07-13)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)