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中使用Oracle数据库(1)
Oct 09 PHP
Apache2 httpd.conf 中文版
Nov 17 PHP
PHP 反射机制实现动态代理的代码
Oct 22 PHP
PHP中如何实现常用邮箱的基本判断
Jan 07 PHP
php绘制圆形的方法
Jan 24 PHP
php添加数据到xml文件的简单例子
Sep 08 PHP
支付宝支付开发――当面付条码支付和扫码支付实例
Nov 04 PHP
PHP递归删除多维数组中的某个值
Apr 17 PHP
详解php实现页面静态化原理
Jun 21 PHP
Laravel框架路由和控制器的绑定操作方法
Jun 12 PHP
PHP日志LOG类定义与用法示例
Sep 06 PHP
thinkphp框架实现路由重定义简化url访问地址的方法分析
Apr 04 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
全国FM电台频率大全 - 13 福建省
2020/03/11 无线电
一个很不错的PHP翻页类
2009/06/01 PHP
利用PHP如何写APP接口详解
2016/08/23 PHP
PHP使用gearman进行异步的邮件或短信发送操作详解
2020/02/27 PHP
用函数式编程技术编写优美的 JavaScript
2006/11/25 Javascript
JS重要知识点小结
2011/11/06 Javascript
深入理解JavaScript系列(9) 根本没有“JSON对象”这回事!
2012/01/15 Javascript
js添加table的行和列 具体实现方法
2013/07/22 Javascript
jQuery Ajax调用WCF服务详细教程
2015/03/31 Javascript
js上传图片及预览功能实例分析
2015/04/24 Javascript
使用jQuery在移动页面上添加按钮和给按钮添加图标
2015/12/04 Javascript
JavaScript与jQuery实现的闪烁输入效果
2016/02/18 Javascript
基于JS实现Android,iOS一个手势动画效果
2016/04/27 Javascript
angular双向绑定模拟探索
2016/12/26 Javascript
javascript函数的节流[throttle]与防抖[debounce]
2017/11/15 Javascript
JS设计模式之命令模式概念与用法分析
2018/02/06 Javascript
浅谈webpack+react多页面开发终极架构
2018/11/11 Javascript
Layui table field初始化加载时进行隐藏的方法
2019/09/19 Javascript
python 动态获取当前运行的类名和函数名的方法
2014/04/15 Python
用Python的Flask框架结合MySQL写一个内存监控程序
2015/11/07 Python
对python pandas 画移动平均线的方法详解
2018/11/28 Python
Python搭建代理IP池实现存储IP的方法
2019/10/27 Python
如何在python中写hive脚本
2019/11/08 Python
Python图像处理库PIL的ImageFilter模块使用介绍
2020/02/26 Python
python制作一个简单的gui 数据库查询界面
2020/11/19 Python
python IP地址转整数
2020/11/20 Python
带有css3动画效果的兼容多浏览器简单导航条示例
2014/01/26 HTML / CSS
HTML5自定义data-* data(obj)属性和jquery的data()方法的使用
2012/12/13 HTML / CSS
值传递还是引用传递
2015/02/08 面试题
年会搞笑主持词
2014/03/27 职场文书
护士演讲稿优秀范文
2014/04/30 职场文书
实验室标语
2014/06/21 职场文书
警察群众路线对照检查材料思想汇报
2014/10/01 职场文书
2014年敬老院工作总结
2014/12/08 职场文书
初中数学课堂教学反思
2016/02/17 职场文书
nginx之queue的具体使用
2022/06/28 Servers