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 相关文章推荐
福利彩票幸运号码自动生成器
Oct 09 PHP
php和js交互一例-PHP教程,PHP应用
Jan 03 PHP
通过具体程序来理解PHP里面的抽象类
Jan 28 PHP
解析PHP留言本模块主要功能的函数说明(代码可实现)
Jun 25 PHP
thinkphp模板继承实例简述
Nov 26 PHP
THINKPHP项目开发中的日志记录实例分析
Dec 01 PHP
php删除指定目录的方法
Apr 03 PHP
php读取der格式证书乱码解决方法
Jun 22 PHP
PHP二维数组排序简单实现方法
Feb 14 PHP
PHP身份证校验码计算方法
Aug 10 PHP
php 文件下载 出现下载文件内容乱码损坏的解决方法(推荐)
Nov 16 PHP
PHP实现基于PDO扩展连接PostgreSQL对象关系数据库示例
Mar 31 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
动易数据转成dedecms的php程序
2007/04/07 PHP
php中利用post传递字符串重定向的实现代码
2011/04/21 PHP
PHP命名空间(namespace)的使用基础及示例
2014/08/18 PHP
搭建自己的PHP MVC框架详解
2017/08/16 PHP
PHP unset函数原理及使用方法解析
2020/08/14 PHP
javascript div 弹出可拖动窗口
2009/02/26 Javascript
JavaScript 继承详解(三)
2009/07/13 Javascript
select标签模拟/美化方法采用JS外挂式插件
2013/04/01 Javascript
让js弹出窗口居前显示的实现方法
2013/07/10 Javascript
jQuery插件实现表格隔行换色且感应鼠标高亮行变色
2013/09/22 Javascript
javascript搜索框点击文字消失失焦时文本出现
2014/09/18 Javascript
angularjs的一些优化小技巧
2014/12/06 Javascript
node中socket.io的事件使用详解
2014/12/15 Javascript
JavaScript中停止执行setInterval和setTimeout事件的方法
2015/05/14 Javascript
jQuery基于ID调用指定iframe页面内的方法
2016/07/06 Javascript
VC调用javascript的几种方法(推荐)
2016/08/09 Javascript
socket.io实现在线群聊功能
2017/04/07 Javascript
Angular中$broadcast和$emit的使用方法详解
2017/05/22 Javascript
Angular 1.x个人使用的经验小结
2017/07/19 Javascript
JavaScript中运算符规则和隐式类型转换示例详解
2017/09/06 Javascript
微信小程序实现省市区三级地址选择
2020/06/21 Javascript
Vue项目结合Vue-layer实现弹框式编辑功能(实例代码)
2020/03/11 Javascript
vue使用better-scroll实现滑动以及左右联动
2020/06/30 Javascript
vue实现前端列表多条件筛选
2020/10/26 Javascript
详解Django中的form库的使用
2015/07/18 Python
django 发送邮件和缓存的实现代码
2018/07/18 Python
python实现查找所有程序的安装信息
2020/02/18 Python
python数据分析:关键字提取方式
2020/02/24 Python
python 实现&quot;神经衰弱&quot;翻牌游戏
2020/11/09 Python
软件测试英文面试题
2012/10/14 面试题
管理部副部长岗位职责范文
2014/03/09 职场文书
企业读书活动总结
2014/06/30 职场文书
督导岗位职责
2015/02/04 职场文书
故意伤害罪辩护词
2015/05/21 职场文书
领导干部学习十八届五中全会精神心得体会
2016/01/05 职场文书
CSS 还能这样玩?奇思妙想渐变的艺术
2021/04/27 HTML / CSS