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 25 PHP
php 显示指定路径下的图片
Oct 29 PHP
php中$this-&amp;gt;含义分析
Nov 29 PHP
PHP 获取MySQL数据库里所有表的实现代码
Jul 13 PHP
php实现图片缩放功能类
Dec 18 PHP
PHP生成图片验证码、点击切换实例
Jun 25 PHP
为PHP安装imagick时出现Cannot locate header file MagickWand.h错误的解决方法
Nov 03 PHP
浅谈php冒泡排序
Dec 30 PHP
php实现的任意进制互转类分享
Jul 07 PHP
php实现网站文件批量压缩下载功能
Oct 28 PHP
PHP获取当前系统时间的方法小结
Oct 03 PHP
PHP实现与java 通信的插件使用教程
Aug 11 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编程效率的53个要点(经验小结)
2010/09/04 PHP
使用ltrace工具跟踪PHP库函数调用的方法
2016/04/25 PHP
详谈phpAdmin修改密码后拒绝访问的问题
2017/04/03 PHP
分享5个非常有用的Laravel Blade指令
2018/05/30 PHP
PHP单元测试配置与使用方法详解
2019/12/27 PHP
XP折叠菜单&amp;仿QQ2006菜单
2006/12/16 Javascript
jQuery 浮动广告实现代码
2008/12/25 Javascript
jQuery 入门级学习笔记及源码
2010/01/22 Javascript
js 利用image对象实现图片的预加载提高访问速度
2013/03/29 Javascript
javascript静态页面传值的三种方法分享
2013/11/12 Javascript
js实现兼容IE和FF的上下层的移动
2015/05/04 Javascript
js实现鼠标划过给div加透明度的方法
2015/05/25 Javascript
Angular.js 实现数字转换汉字实例代码
2016/07/14 Javascript
深入理解jQuery3.0的domManip函数
2016/09/01 Javascript
AngularJS实现Input格式化的方法
2016/11/07 Javascript
bootstrap手风琴制作方法详解
2017/01/11 Javascript
详解vue组件通信的三种方式
2017/06/30 Javascript
JS库particles.js创建超炫背景粒子插件(附源码下载)
2017/09/13 Javascript
详解webpack模块加载器兼打包工具
2018/09/11 Javascript
JavaScript错误处理操作实例详解
2019/01/04 Javascript
监听element-ui table滚动事件的方法
2019/03/26 Javascript
基于javascript的无缝滚动动画1
2020/08/07 Javascript
python删除文件示例分享
2014/01/28 Python
python魔法方法-属性访问控制详解
2016/07/25 Python
Python使用matplotlib简单绘图示例
2018/02/01 Python
python3 常见解密加密算法实例分析【base64、MD5等】
2019/12/19 Python
使用jupyter Nodebook查看函数或方法的参数以及使用情况
2020/04/14 Python
Python如何使用队列方式实现多线程爬虫
2020/05/12 Python
python中tab键是什么意思
2020/06/18 Python
python实现马丁策略的实例详解
2021/01/15 Python
ONLY德国官方在线商店:购买时尚女装
2017/09/21 全球购物
Myprotein丹麦官网:欧洲第一运动营养品牌
2019/04/15 全球购物
领导班子四风问题对照检查材料
2014/09/27 职场文书
酒店财务部岗位职责
2015/04/14 职场文书
被告答辩状范文
2015/05/22 职场文书
员工工作心得体会
2019/05/07 职场文书