php利用事务处理转账问题


Posted in PHP onApril 22, 2015

本文实例讲述了php+Mysqli利用事务处理转账问题的方法。分享给大家供大家参考

<?php 
 header("Content-type:text/html; charset=utf-8"); 
  
 $mysqli = new mysqli("localhost", "root", "064319", "php"); 
 $mysqli->set_charset("utf8"); 
  
 if($mysqli->connect_errno) { 
  die('数据库连接失败'.$mysqli->connect_error); 
 } 
  
 $mysqli->autocommit(false); //自动提交模式设为false 
 $flag = true; //事务是否成功执行的标志 
  
 $query = "update account set balance=balance-1000 where id=3"; 
 $result = $mysqli->query($query); 
 $affected_count = $mysqli->affected_rows; 
 if(!result || $affected_count == 0) { //失败 
  $flag = false;  
 } 
  
 $query = "update account set balance=balance+1000 where id=2"; 
 $result = $mysqli->query($query); 
 $affected_count = $mysqli->affected_rows; 
 if(!$result || $affected_count == 0) { 
  $flag = false; 
 } 
  
 if($flag) { 
  $mysqli->commit(); 
  echo '转账成功'; 
 } else { 
  $mysqli->rollback(); 
  echo '转账失败'; 
 } 
  
 $mysqli->autocommit(true); //重新设置事务为自动提交 
 $mysqli->close(); 
?>

代码二:

<?php 
 try{ 
 $pdo=new PDO("mysql:host=localhost;dbname=psp","root",""); 
 $pdo->exec("set names utf8"); 
 $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);//设置异常处理模式 
 $pdo->setAttribute(PDO::ATTR_AUTOCOMMIT,0);//关闭自动提交 
 }catch(PDOException $e){ 
 echo "数据库连接失败"; 
 exit; 
 } 
 
 try{ 
 $age=10; 
 $pdo->beginTransaction();//开始事务 
 $affected_rows1=$pdo->exec("update kfry set k_age=k_age+{$age} where k_name='user1'"); 
 $affected_rows2=$pdo->exec("update kfry set k_age=k_age-{$age} where k_name='user2'");//随意更改使之执行成功或失败 
 /* if($affected_rows1&&$affected_rows2) 
 { 
 $pdo->commit(); 
 echo "操作成功"; 
 }else{ 
 $pdo->rollback(); 
 } */
 if(!$affected_rows1) 
 throw new PDOException("加入错误"); 
 if(!$affected_rows2) 
 throw new PDOException("减少错误"); 
 echo "操作成功"; 
 $pdo->commit();//如果执行到此处前面两个更新sql语句执行成功,整个事务执行成功 
 }catch(PDOException $e){ 
 echo "操作失败:".$e->getMessage(); 
 $pdo->rollback();//执行事务中的语句出了问题,整个事务全部撤销 
 } 
 $pdo->setAttribute(PDO::ATTR_AUTOCOMMIT,1); 
 //测试是否成功 
 echo "\n操作结果为:\n"; 
 $sql="select * from kfry"; 
 $result=$pdo->query($sql); 
 foreach($result as $v) 
 { 
 echo $v['k_name']." ".$v['k_age']."\n"; 
 } 
?>

以上所述就是本文的全部内容了,希望大家能够喜欢。

PHP 相关文章推荐
用PHP中的 == 运算符进行字符串比较
Nov 26 PHP
PHP+FLASH实现上传文件进度条相关文件 下载
Jul 21 PHP
php教程之魔术方法的使用示例(php魔术函数)
Feb 12 PHP
php文件夹的创建与删除方法
Jan 24 PHP
php通过function_exists检测函数是否存在的方法
Mar 18 PHP
php使用正则表达式进行字符串搜索的方法
Mar 23 PHP
PHP+MySQL实现的简单投票系统实例
Feb 24 PHP
PHP生成可点击刷新的验证码简单示例
May 13 PHP
PHP之图片上传类实例代码(加了缩略图)
Jun 30 PHP
PHP环境搭建的详细步骤
Jun 30 PHP
thinkPHP中配置的读取与C方法详解
Dec 05 PHP
PHP中用Trait封装单例模式的实现
Dec 18 PHP
ThinkPHP文件缓存类代码分享
Apr 22 #PHP
php文件下载处理方法分析
Apr 22 #PHP
php实现用手机关闭计算机(电脑)的方法
Apr 22 #PHP
解决ThinkPHP关闭调试模式时报错的问题汇总
Apr 22 #PHP
php文件缓存类用法实例分析
Apr 22 #PHP
php实现将wav文件转换成图像文件并在页面中显示的方法
Apr 21 #PHP
PHP判断是否为空的几个函数对比
Apr 21 #PHP
You might like
查找php配置文件php.ini所在路径的二种方法
2014/05/26 PHP
linux平台编译安装PHP7并安装Redis扩展与Swoole扩展实例教程
2016/09/30 PHP
JS实现字体选色板实例代码
2013/11/20 Javascript
jQuery实现倒计时按钮功能代码分享
2014/09/03 Javascript
js判断滚动条是否已到页面最底部或顶部实例
2014/11/20 Javascript
jQuery对象初始化的传参方式
2015/02/26 Javascript
jQuery+HTML5+CSS3制作支持响应式布局时间轴插件
2016/08/10 Javascript
JavaScript用构造函数如何获取变量的类型名
2016/12/23 Javascript
JSON键值对序列化和反序列化解析
2017/01/24 Javascript
Vue.js对象转换实例
2017/06/07 Javascript
浅谈vue自定义全局组件并通过全局方法 Vue.use() 使用该组件
2017/12/07 Javascript
vue中多个倒计时实现代码实例
2019/03/27 Javascript
微信小程序如何调用json数据接口并解析
2019/06/29 Javascript
python实现在目录中查找指定文件的方法
2014/11/11 Python
Python面向对象之静态属性、类方法与静态方法分析
2018/08/24 Python
django fernet fields字段加密实践详解
2019/08/12 Python
windows环境中利用celery实现简单任务队列过程解析
2019/11/29 Python
Python:二维列表下标互换方式(矩阵转置)
2019/12/02 Python
你应该知道的Python3.6、3.7、3.8新特性小结
2020/05/12 Python
keras-siamese用自己的数据集实现详解
2020/06/10 Python
html5 svg 中元素点击事件添加方法
2013/01/16 HTML / CSS
药学专业毕业生求职信
2013/10/20 职场文书
市场营销专科应届生求职信
2013/11/24 职场文书
校友会欢迎辞
2014/01/13 职场文书
韩国商务邀请函
2014/01/14 职场文书
业绩考核岗位职责
2014/02/01 职场文书
竞选劳动委员演讲稿
2014/04/28 职场文书
大学生标准自荐书
2014/06/15 职场文书
垃圾分类的活动方案
2014/08/15 职场文书
2016银行招聘自荐信
2016/01/28 职场文书
python实现求纯色彩图像的边框
2021/04/08 Python
MySQL优化之如何写出高质量sql语句
2021/05/17 MySQL
Navicat for MySQL的使用教程详解
2021/05/27 MySQL
MySQL数据库查询进阶之多表查询详解
2022/04/08 MySQL
WINDOWS下安装mysql 8.x 的方法图文教程
2022/04/19 MySQL
MySql数据库 查询时间序列间隔
2022/05/11 MySQL