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环境配置 php5 mysql5 apache2 phpmyadmin安装与配置
Nov 17 PHP
利用PHP和AJAX创建RSS聚合器的代码
Mar 13 PHP
wordpress之wp-settings.php
Aug 17 PHP
让PHP以ROOT权限执行系统命令的方法
Feb 10 PHP
php curl 登录163邮箱并抓取邮箱好友列表的代码(经测试)
Apr 07 PHP
php HandlerSocket的使用
May 02 PHP
ThinkPHP模版中导入CSS和JS文件的方法
Nov 29 PHP
PHP命名空间namespace用法实例分析
Sep 27 PHP
PHP CURL post数据报错 failed creating formpost data
Oct 16 PHP
PHP实现的同步推荐操作API接口案例分析
Nov 30 PHP
详解如何实现Laravel的服务容器的方法示例
Apr 15 PHP
PHP代码加密的方法总结
Mar 13 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/07/05 PHP
php以fastCGI的方式运行时文件系统权限问题及解决方法
2015/05/11 PHP
Joomla框架实现字符串截取的方法示例
2017/07/18 PHP
juqery 学习之四 筛选过滤
2010/11/30 Javascript
JS验证日期的格式YYYY-mm-dd 具体实现
2013/06/29 Javascript
js实现禁止中文输入的方法
2015/01/14 Javascript
js中获取时间new Date()的全面介绍
2016/06/20 Javascript
基于JavaScript实现熔岩灯效果导航菜单
2017/01/04 Javascript
微信小程序动态的加载数据实例代码
2017/04/14 Javascript
JavaScript限制在客户区可见范围的拖拽(解决scrollLeft和scrollTop的问题)(2)
2017/05/17 Javascript
Angular 2父子组件数据传递之@ViewChild获取子组件详解
2017/07/04 Javascript
vue与bootstrap实现时间选择器的示例代码
2017/08/26 Javascript
JavaScript 下载svg图片为png格式
2018/06/21 Javascript
jQuery实现的点击图片居中放大缩小功能示例
2019/01/16 jQuery
使用pm2自动化部署node项目的方法步骤
2019/01/28 Javascript
详解javascript设计模式三:代理模式
2019/03/25 Javascript
Python获取文件所在目录和文件名的方法
2017/01/12 Python
使用Python写一个贪吃蛇游戏实例代码
2017/08/21 Python
python导包的几种方法(自定义包的生成以及导入详解)
2019/07/15 Python
30秒学会30个超实用Python代码片段【收藏版】
2019/10/15 Python
Pytorch GPU显存充足却显示out of memory的解决方式
2020/01/13 Python
Python基于DB-API操作MySQL数据库过程解析
2020/04/23 Python
tensorflow模型转ncnn的操作方式
2020/05/25 Python
python和go语言的区别是什么
2020/07/20 Python
5个你不知道的HTML5的接口介绍
2013/08/07 HTML / CSS
AmazeUI中各种的导航式菜单与解决方法
2020/08/19 HTML / CSS
Spartoo葡萄牙鞋类网站:线上销售鞋履与时尚配饰
2017/01/11 全球购物
瑞典多品牌连锁店:Johnells
2021/01/13 全球购物
军训鉴定表自我鉴定
2014/02/13 职场文书
节约电力资源的建议书
2014/03/12 职场文书
党的群众路线教育实践活动学习笔记范文
2014/11/06 职场文书
合伙经营协议书范本(通用版)
2014/12/03 职场文书
2015个人半年总结范文
2015/03/09 职场文书
2015年城管个人工作总结
2015/05/15 职场文书
2015年度对口支援工作总结
2015/07/22 职场文书
阿里面试Nacos配置中心交互模型是push还是pull原理解析
2022/07/23 Java/Android