欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  php教程

Mysql事务处理(一个转账程序) - PHP

程序员文章站 2022-04-16 20:34:12
...
php代码
<?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();
?>
 
 
 
&&&&&&&&&&&&&&&&&&
 
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');