PHP+Mysql基于事务处理实现转账功能的方法


Posted in PHP onJuly 08, 2015

本文实例讲述了PHP+Mysql基于事务处理实现转账功能的方法。分享给大家供大家参考。具体如下:

<?php
  header("Content-Type:text/html;charset=utf-8");
  $mysqli=new mysqli("localhost","root","","test");
  if(mysqli_connect_errno())
  {
  printf("连接失败:%s<br>",mysqli_connect_error());
  exit();
  }
  $success=TRUE;
  $price=8000;
  $result=$mysqli->query("select cash from account where name='userA'");
  while($row=$result->fetch_assoc())
  {
  $value=$row["cash"];
  echo $value;
  }
  $mysqli->autocommit(0);
  if($value>=$price){
  $result=$mysqli->query("UPDATE account set cash=cash-$price where name='userA'");
  }else {
  echo '余额不足';
  exit();
  }
  if(!$result or $mysqli->affected_rows!=1)
  {
  $success=FALSE;
  }
  $result=$mysqli->query("UPDATE account set cash=cash+$price where name='userB'");
  if(!result or $mysqli->affected_rows!=1){
  $success=FALSE;
  }
  if($success)
  {
  $mysqli->commit();
  echo '转账成功!';
  }else
  {
  $mysqli->rollback();
  echo "转账失败!";
  }
  $mysqli->autocommit(1);
  $query="select cash from account where name=?";
  $stmt=$mysqli->prepare($query);
  $stmt->bind_param('s',$name);
  $name='userA';
  $stmt->execute();
  $stmt->store_result();
  $stmt->bind_result($cash);
  while($stmt->fetch())
  echo "用户userA的值为:".$cash;
  $mysqli->close();
?>

数据库SQL语句如下:

create table account{
 userID smallint unsigned not null auto_increment,
 name varchar(45) not null,
 cash decimal(9,2) not null,
 primary key(userID)
)type=InnoDB;
insert into account(name,cash) values ('userA','2000');
insert into account(name,cash) values ('userB','10000');

希望本文所述对大家的php程序设计有所帮助。

PHP 相关文章推荐
第十一节 重载 [11]
Oct 09 PHP
php 移除数组重复元素的一点说明
Nov 27 PHP
php中jQuery插件autocomplate的简单使用笔记
Jun 14 PHP
深入php list()函数的详解
Jun 05 PHP
PHP中CURL的CURLOPT_POSTFIELDS参数使用细节
Mar 17 PHP
合并ThinkPHP配置文件以消除代码冗余的实现方法
Jul 22 PHP
php天翼开放平台短信发送接口实现方法
Dec 22 PHP
php mailer类调用远程SMTP服务器发送邮件实现方法
Mar 04 PHP
PHP采用超长(超大)数字运算防止数字以科学计数法显示的方法
Apr 01 PHP
PHP实现负载均衡session共享redis缓存操作示例
Aug 22 PHP
PHP基础之输出缓冲区基本概念、原理分析
Jun 19 PHP
php设计模式之原型模式分析【星际争霸游戏案例】
Mar 23 PHP
php将html转成wml的WAP标记语言实例
Jul 08 #PHP
php实现数组中索引关联数据转换成json对象的方法
Jul 08 #PHP
PHP使用pear自带的mail类库发邮件的方法
Jul 08 #PHP
php获取从百度、谷歌等搜索引擎进入网站关键词的方法
Jul 08 #PHP
PHP实现多文件上传的方法
Jul 08 #PHP
PHP实现图片自动清理的方法
Jul 08 #PHP
php-redis中的sort排序函数总结
Jul 08 #PHP
You might like
ezSQL PHP数据库操作类库
2010/05/16 PHP
使用HMAC-SHA1签名方法详解
2013/06/26 PHP
PHP curl实现抓取302跳转后页面的示例
2014/07/04 PHP
PHP中创建图像并绘制文字的例子
2014/11/19 PHP
CodeIgniter配置之SESSION用法实例分析
2016/01/19 PHP
php使用redis的几种常见操作方式和用法示例
2020/02/20 PHP
javascript 出生日期和身份证判断大全
2008/11/13 Javascript
javascript 实用的文字链提示框效果
2010/06/30 Javascript
JS继承--原型链继承和类式继承
2013/04/08 Javascript
JQuery对class属性的操作实现按钮开关效果
2013/10/11 Javascript
jquery-syntax动态语法着色示例代码
2014/05/14 Javascript
JavaScript基础教程之alert弹出提示框实例
2014/10/16 Javascript
用svg制作富有动态的tooltip
2015/07/17 Javascript
Bootstrap每天必学之基础排版
2015/11/20 Javascript
浅析JavaScript中的对象类型Object
2016/05/26 Javascript
vue jsx 使用指南及vue.js 使用jsx语法的方法
2017/11/11 Javascript
js实现rem自动匹配计算font-size的示例
2017/11/18 Javascript
详解vue项目打包步骤
2019/03/29 Javascript
简单通过settimeout看javascript的运行机制
2019/05/10 Javascript
Vue 路由间跳转和新开窗口的方式(query、params)
2019/12/25 Javascript
Vue实现可移动水平时间轴
2020/06/29 Javascript
pycharm远程linux开发和调试代码的方法
2018/07/17 Python
PyQt5下拉式复选框QComboCheckBox的实例
2019/06/25 Python
详解用Python进行时间序列预测的7种方法
2020/03/13 Python
python实现贪吃蛇双人大战
2020/04/18 Python
python数据处理——对pandas进行数据变频或插值实例
2020/04/22 Python
利用python实现汉诺塔游戏
2021/03/01 Python
薇诺娜官方网上商城:专注敏感肌肤
2017/05/25 全球购物
校园摄影活动策划方案
2014/02/05 职场文书
《蒙娜丽莎之约》教学反思
2014/02/27 职场文书
党支部党的群众路线对照检查材料
2014/09/24 职场文书
2015年秋季学校开学标语
2015/07/16 职场文书
2015年数学教研工作总结
2015/07/22 职场文书
如何使用Python实现一个简易的ORM模型
2021/05/12 Python
浅谈PostgreSQL表分区的三种方式
2021/06/29 PostgreSQL