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递归创建和删除文件夹的代码小结
Apr 13 PHP
基于php中使用excel的简单介绍
Aug 02 PHP
使用gd库实现php服务端图片裁剪和生成缩略图功能分享
Dec 25 PHP
phpMyAdmin自动登录和取消自动登录的配置方法
May 12 PHP
php 模拟 asp.net webFrom 按钮提交事件实例
Oct 13 PHP
php对象在内存中的存在形式分析
Feb 03 PHP
Yii 2.0自带的验证码使用经验分享
Jun 19 PHP
laravel中短信发送验证码的实现方法
Apr 25 PHP
PHP观察者模式定义与用法实例分析
Mar 22 PHP
php7 新增功能实例总结
May 25 PHP
通过实例解析PHP数据类型转换方法
Jul 11 PHP
用php如何解决大文件分片上传问题
Jul 07 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安全编程之加密功能
2006/10/09 PHP
提升PHP执行速度全攻略(下)
2006/10/09 PHP
php 时间计算问题小结
2009/01/04 PHP
如何用phpmyadmin设置mysql数据库用户的权限
2012/01/09 PHP
探讨:如何使用PHP实现计算两个日期间隔的年、月、周、日数
2013/06/13 PHP
php将图片保存为不同尺寸图片的图片类实例
2015/03/30 PHP
ThinkPHP 在阿里云上的nginx.config配置实例详解
2017/10/11 PHP
JavaScript中的Location地址对象
2008/01/16 Javascript
jQuery 白痴级入门教程
2009/11/11 Javascript
js 有框架页面跳转(target)三种情况下的应用
2013/04/09 Javascript
Script标签与访问HTML页面详解
2014/01/10 Javascript
JavaScript用Number方法实现string转int
2014/05/13 Javascript
jQuery源码分析之Callbacks详解
2015/03/13 Javascript
封装属于自己的JS组件
2016/01/27 Javascript
浅谈AngularJs指令之scope属性详解
2016/10/24 Javascript
AngularJS中的DOM操作用法分析
2016/11/04 Javascript
textarea 在浏览器中固定大小和禁止拖动的实现方法
2016/12/03 Javascript
AngularJS 控制器 controller的详解
2017/10/17 Javascript
JS正则表达式完美实现身份证校验功能
2017/10/18 Javascript
jquery select插件异步实时搜索实例代码
2017/10/20 jQuery
JS插件clipboard.js实现一键复制粘贴功能
2020/12/04 Javascript
浅谈vue获得后台数据无法显示到table上面的坑
2020/08/13 Javascript
python 请求服务器的实现代码(http请求和https请求)
2018/05/25 Python
对python3中, print横向输出的方法详解
2019/01/28 Python
Django CBV与FBV原理及实例详解
2019/08/12 Python
如何通过python实现人脸识别验证
2020/01/17 Python
Volcom英国官方商店:美国殿堂级滑板、冲浪、滑雪服装品牌
2019/03/13 全球购物
办公室主任职责范本
2014/03/07 职场文书
《厄运打不垮的信念》教学反思
2014/04/13 职场文书
婚礼女方父母答谢词
2015/01/04 职场文书
社区低保工作总结2015
2015/07/23 职场文书
教师反邪教心得体会
2016/01/15 职场文书
如何在Mac上通过docker配置PHP开发环境
2021/05/29 PHP
Python如何识别银行卡卡号?
2021/06/10 Python
实操Python爬取觅知网素材图片示例
2021/11/27 Python
搞笑Gif:这么白这么长的腿像极了一楼的女朋友
2022/03/21 杂记