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+Mysql基于事务处理实现转账功能的方法的更多相关文章
- 关于MySQL的事务处理及隔离级别
原文地址 :http://blog.sina.com.cn/s/blog_4c197d420101awhc.html 事务是DBMS得执行单位.它由有限得数据库操作序列组成得.但不是任意得数据库操作序 ...
- mysql的事务处理与锁表
数据库的事务处理可以保证一组处理结果的正确性.mysql中只有INNODB和BDB引擎的数据表才支持事务处理,对于不支持事务的MyISAM引擎数据库可以使用表锁定的方法来实现相同的功能. mysql的 ...
- MySQL的事务处理及隔离级别
事务是DBMS得执行单位.它由有限得数据库操作序列组成得.但不是任意得数据库操作序列都能成为事务.一般来说,事务是必须满足4个条件(ACID) 原子性(Autmic):事务在执行性,要 ...
- 浅析Mysql 数据回滚错误的解决方法
介绍一下关于Mysql数据回滚错误的解决方法.需要的朋友可以过来参考下 MYSQL的事务处理主要有两种方法.1.用begin,rollback,commit来实现begin 开始一个事务rollbac ...
- 浅析Mysql数据回滚错误的解决方法
介绍一下关于Mysql数据回滚错误的解决方法.需要的朋友可以过来参考下 MYSQL的事务处理主要有两种方法. 1.用begin,rollback,commit来实现 begin 开始一个事 ...
- jsp+servlet+mysql 实现简单的银行登录转账功能
jsp+servlet+mysql 实现简单的银行登录转账功能 [前期的准备] html(登录界面),servlet(处理业务逻辑),jsp(主要实现界面),mysql(实现与数据库的简单的交互)先从 ...
- Dao跨事务调用实现转账功能
1.首先在数据库当中创建数据库,并且创建它的 实现类 package com.beiwo.epet.entity; public class Account { private int id; pri ...
- Mysql基于GTID复制模式-运维小结 (完整篇)
先来看mysql5.6主从同步操作时遇到的一个报错:mysql> change master to master_host='192.168.10.59',master_user='repli' ...
- MySQL 基于lvm2的备份实战演练 (快照备份)
前言: lvm2实现热备的原理是基于lvm2的快照功能,lvm2可以实现数据集不大的情况下的热备. 实战过程如下:这里的演示是在一台Mariadb服务器上进行创建快照,将快照中的文件scp到备份服务器 ...
随机推荐
- Oracle官方非托管Odac驱动与Oracle官方托管odac驱动
方便自己,方便他人,记一次连接oracle的经历,使用 [Oracle官方非托管Odac驱动,Oracle.DataAccess.Client]连接数据库的时候程序会报错,找了很久都不知道是什么原因, ...
- (转)linux下如何批量杀JAVA进程或某个进程方法
在工作中经常需要停止JAVA进程,停止时间也比较长,那么有时候因为一些情况,需要把 linux 下JAVA所有进程 kill 掉,又不能用killall 直接杀掉某一进程名称包含的所有运行中进程(我们 ...
- 1053: [HAOI2007]反素数ant
1053: [HAOI2007]反素数ant Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3480 Solved: 2036[Submit][St ...
- Pick apples(大范围贪心,小范围完全背包)
Pick apples Time Limit: 1000MS Memory Limit: 165536KB Submit Statistic Discuss Problem Description O ...
- 【Spring】渲染Web视图
前言 前面学习了编写Web请求的控制器,创建简单的视图,本篇博文讲解控制器完成请求到结果渲染到用户的浏览器的过程. 渲染Web视图 理解视图解析 前面所编写的控制器方法都没有直接产生浏览器中渲染所需要 ...
- jQuery点击下拉菜单的展示与隐藏
首先点击显示某个div,然后要求再次点击时消失,或者点击document的其他地方会隐藏掉这个层,涉及到冒泡的问题,阻止document冒泡到dom上.代码如下: var $el = $(" ...
- 【经验分享(续篇)】Trachtenberg system(特拉亨伯格速算系统)
之前有篇文章简单地介绍了Trachtenberg系统的乘法计算方法,地址在这里.针对一些特定的数字,Trachtenberg还发展出了更快的计算方法. 先来介绍乘数为11的速算方法.它的计算规则我们可 ...
- 如何开发一个chrome扩展
chrome是一个不错的浏览器,web开发者工作中一般都会使用chrome做为默认浏览器,它有很多扩展,给浏览器补充了各种功能,增强了用户体验.chrome具体能干什么?怎么做出来的呢? chrome ...
- [O]SQL SERVER下有序GUID和无序GUID作为主键&聚集索引的性能表现
背景 前段时间学习<Microsoft SQL Server 2008技术内幕:T-SQL查询>时,看到里面关于无序GUID作为主键与聚集索引的建议,无序GUID作为主键以及作为聚集索引 ...
- mybatis简单搭建
背景 闲来没事把mybatis再熟悉一下,可能之前自己搭过没有记录.mybatis其实就是一个orm框架,在我们之前做.net工作的时候,我们的ef,dapper等都是这样的框架,java现在web流 ...