這篇文章主要介紹了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程序設計有所幫助。
新聞熱點
疑難解答