这篇文章主要介绍了PHP+Mysql基于事务处理实现转账功能的方法,实例分析了mysql事务处理的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
本文实例讲述了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程序设计有所帮助。
新闻热点
疑难解答