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加速 eAccelerator配置和使用指南
Jun 05 PHP
过滤掉PHP数组中的重复值的实现代码
Jul 17 PHP
PHP 中检查或过滤IP地址的实现代码
Nov 27 PHP
php实现的九九乘法口诀表简洁版
Jul 28 PHP
PHP改进计算字符串相似度的函数similar_text()、levenshtein()
Oct 27 PHP
php使用fsockopen函数发送post,get请求获取网页内容的方法
Nov 15 PHP
Zend Framework缓存Cache用法简单实例
Mar 19 PHP
php 二维数组时间排序实现代码
Nov 19 PHP
PHP 实现从数据库导出到.csv文件方法
Jul 06 PHP
Thinkphp5结合layer弹窗定制操作结果页面
Jul 07 PHP
php 读写json文件及修改json的方法
Mar 07 PHP
PHP实现十进制数字与二十六进制字母串相互转换操作示例
Aug 10 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入门学习知识点五 关于php数组的几个基本操作
2011/07/14 PHP
PHP实现移除数组中为空或为某值元素的方法
2017/01/07 PHP
简单谈谈 php 文件锁
2017/02/19 PHP
JS 强制设为首页的代码
2009/01/31 Javascript
javascript截取字符串(通过substring实现并支持中英文混合)
2013/06/24 Javascript
wap图片滚动特效无css3元素纯js脚本编写
2014/08/22 Javascript
浅析webapp框架AngularUI的demo
2014/12/21 Javascript
jQuery中after()方法用法实例
2014/12/25 Javascript
JavaScript修改浏览器tab标题小技巧
2015/01/06 Javascript
JS Attribute属性操作详解
2016/05/19 Javascript
jQuery事件用法详解
2016/10/06 Javascript
js鼠标经过tab选项卡时实现切换延迟
2017/03/24 Javascript
nodejs学习笔记之路由
2017/03/27 NodeJs
JS时间控制实现动态效果的实例讲解
2017/07/31 Javascript
JavaScript之创意时钟项目(实例讲解)
2017/10/23 Javascript
Vue的移动端多图上传插件vue-easy-uploader的示例代码
2017/11/27 Javascript
微信小程序如何获取用户信息
2018/01/26 Javascript
javascript数据结构之多叉树经典操作示例【创建、添加、遍历、移除等】
2018/08/01 Javascript
微信小程序实现多选框全选与取消全选功能示例
2019/05/14 Javascript
vue router总结 $router和$route及router与 router与route区别
2019/07/05 Javascript
详解react组件通讯方式(多种)
2020/05/06 Javascript
Vue实现简单购物车功能
2020/12/13 Vue.js
[00:17]天涯墨客一技能展示
2018/08/25 DOTA
基python实现多线程网页爬虫
2015/09/06 Python
Python中super()函数简介及用法分享
2016/07/11 Python
Python面向对象程序设计类的多态用法详解
2019/04/12 Python
捷克玩具商店:Bambule
2019/02/23 全球购物
捷克购买家具网站:JENA nábytek
2020/03/19 全球购物
大学四年职业生涯规划书范文
2014/01/02 职场文书
本科生职业生涯规划书范文
2014/01/21 职场文书
领导调研接待方案
2014/02/27 职场文书
大学生团日活动总结
2015/05/06 职场文书
入党积极分子群众意见
2015/06/01 职场文书
关于军训的感想
2015/08/07 职场文书
SpringBoot+Vue+JWT的前后端分离登录认证详细步骤
2021/09/25 Java/Android
Java实现扫雷游戏详细代码讲解
2022/05/25 Java/Android