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');
原文地址:https://www.cnblogs.com/ghjbk/p/6753818.html