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 相关文章推荐
PHPUnit PHP测试框架安装方法
Mar 23 PHP
Codeigniter注册登录代码示例
Jun 12 PHP
php实现在多维数组中查找特定value的方法
Jul 29 PHP
PHP 9 大缓存技术总结
Sep 17 PHP
PHP利用imagick生成组合缩略图
Feb 19 PHP
基于laravel制作APP接口(API)
Mar 15 PHP
PHP表单数据写入MySQL数据库的代码
May 31 PHP
PHP微信开发之查询城市天气
Jun 23 PHP
微信随机生成红包金额算法php版
Jul 21 PHP
php opendir()列出目录下所有文件的实例代码
Oct 02 PHP
实例分析基于PHP微信网页获取用户信息
Nov 24 PHP
php字符串函数 str类常见用法示例
May 15 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
收音机的保养
2021/03/01 无线电
php多文件上传功能实现原理及代码
2013/04/18 PHP
PHP修改session_id示例代码
2014/01/08 PHP
Zend Framework上传文件重命名的实现方法
2016/11/25 PHP
PHP批量修改文件名称的方法分析
2017/02/27 PHP
PHP简单计算两个时间差的方法示例
2017/06/20 PHP
php实现断点续传大文件示例代码
2020/06/19 PHP
laravel与thinkphp之间的区别与优缺点
2021/03/02 PHP
javascript中的事件代理初探
2014/03/08 Javascript
jquery向上向下取整适合分页查询
2014/09/06 Javascript
angular.element方法汇总
2015/01/07 Javascript
HTML中setCapture、releaseCapture 使用方法浅析
2016/09/25 Javascript
jQuery实现表格文本框淡入更改值后淡出效果
2016/09/27 Javascript
jQuery实现获取隐藏div高度的方法示例
2017/02/09 Javascript
JS+HTML5实现上传图片预览效果完整实例【测试可用】
2017/04/20 Javascript
详解Node.js项目APM监控之New Relic
2017/05/12 Javascript
Vue 重置组件到初始状态的方法示例
2018/10/10 Javascript
python实现杨辉三角思路
2017/07/14 Python
Python中几种属性访问的区别与用法详解
2018/10/10 Python
一篇文章彻底搞懂Python中可迭代(Iterable)、迭代器(Iterator)与生成器(Generator)的概念
2019/05/13 Python
Python3实现监控新型冠状病毒肺炎疫情的示例代码
2020/02/13 Python
python 字符串的驻留机制及优缺点
2020/06/19 Python
python tkinter实现连连看游戏
2020/11/16 Python
利用CSS3实现的文字定时向上滚动
2016/08/29 HTML / CSS
Bootstrap 学习分享
2012/11/12 HTML / CSS
用HTML5制作视频拼图的教程
2015/05/13 HTML / CSS
HTML5 video 上传预览图片视频如何设置、预览视频某秒的海报帧
2018/08/28 HTML / CSS
MUGLER官方网站:蒂埃里·穆勒香水
2019/11/26 全球购物
土木工程应届生自荐信
2013/09/24 职场文书
2014购房个人委托书范本
2014/10/12 职场文书
不尊敬老师的检讨书
2014/12/21 职场文书
八年级作文之感恩
2019/11/22 职场文书
导游词之无锡梅园
2019/11/28 职场文书
JS继承最简单的理解方式
2021/03/31 Javascript
Python读取文件夹下的所有文件实例代码
2021/04/02 Python
Redis Cluster 集群搭建你会吗
2021/08/04 Redis