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 相关文章推荐
Search Engine Friendly的URL设计
Oct 09 PHP
php桌面中心(一) 创建数据库
Mar 11 PHP
php 攻击方法之谈php+mysql注射语句构造
Oct 30 PHP
php学习笔记之 函数声明(二)
Jun 09 PHP
判断Keep-Alive模式的HTTP请求的结束的实现代码
Aug 06 PHP
PHP中获取时间的下一周下个月的方法
Mar 18 PHP
php下Memcached入门实例解析
Jan 05 PHP
根据key删除数组中指定的元素实现方法
Mar 02 PHP
thinkphp实现附件上传功能
May 26 PHP
ThinkPHP3.2.3框架邮件发送功能图文实例详解
Apr 23 PHP
thinkPHP框架通过Redis实现增删改查操作的方法详解
May 13 PHP
PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解
Dec 20 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冒泡排序算法的深入理解
2013/06/09 PHP
迁移PHP版本到PHP7
2015/02/06 PHP
PHP用反撇号执行外部命令
2015/04/14 PHP
javascript flash下fromCharCode和charCodeAt方法使用说明
2008/01/12 Javascript
自己写了一个展开和收起的多更能型的js效果
2013/03/05 Javascript
基于编写jQuery的无缝滚动插件
2014/08/02 Javascript
javascript实现验证身份证号的有效性并提示
2015/04/30 Javascript
nodejs进阶(6)—连接MySQL数据库示例
2017/01/07 NodeJs
angular directive的简单使用总结
2017/05/24 Javascript
JS自动生成动态HTML验证码页面
2017/06/14 Javascript
详解vuex中mapState,mapGetters,mapMutations,mapActions的作用
2018/04/13 Javascript
浅谈在Vue.js中如何实现时间转换指令
2019/01/06 Javascript
使用 Github Actions 自动部署 Angular 应用到 Github Pages的方法
2020/07/20 Javascript
解决vue项目中出现Invalid Host header的问题
2020/11/17 Javascript
js实现有趣的倒计时效果
2021/01/19 Javascript
[02:44]DOTA2英雄基础教程 钢背兽
2013/12/19 DOTA
[42:25]EG vs Spirit Supermajor 败者组 BO3 第二场 6.4
2018/06/05 DOTA
对于Python中线程问题的简单讲解
2015/04/03 Python
python入门:这篇文章带你直接学会python
2018/09/14 Python
opencv实现静态手势识别 opencv实现剪刀石头布游戏
2019/01/22 Python
详解Django-restframework 之频率源码分析
2019/02/27 Python
Python-opencv 双线性插值实例
2020/01/17 Python
TensorFlow 输出checkpoint 中的变量名与变量值方式
2020/02/11 Python
Python如何向SQLServer存储二进制图片
2020/06/08 Python
python实现图像外边界跟踪操作
2020/07/13 Python
澳大利亚女士时装在线:Rockmans
2018/09/26 全球购物
L*SPACE官网:比基尼、泳装和度假服装
2019/03/18 全球购物
养殖人员的创业计划书范文
2013/12/26 职场文书
销售主管的自我评价分享
2014/01/03 职场文书
小学敬老月活动方案
2014/02/11 职场文书
《孔子拜师》教学反思
2014/02/24 职场文书
建筑工地大门标语
2014/06/18 职场文书
薪资证明范本
2015/06/19 职场文书
安全教育的主题班会
2015/08/13 职场文书
李清照的诗词赏析(20首)
2019/08/22 职场文书
MongoDB支持的数据类型
2022/04/11 MongoDB