zoukankan      html  css  js  c++  java
  • 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');
  • 相关阅读:
    Daily Coding Problem: Problem #994
    Android 开发绕不过的坑:你的 Bitmap 究竟占多大内存?(转)
    1087.Brace-Expansion (prime)
    Ant Design Vue照片墙a-upload
    echarts多条折线图添加单位
    任意文件下载包含https的图片
    错误:Linux环境jps: command not found
    SqlServer事务
    ADO.NET之连接池
    SqlServer全文索引在项目中的实际应用
  • 原文地址:https://www.cnblogs.com/ghjbk/p/6753818.html
Copyright © 2011-2022 走看看