本文实例讲述了PHP+Mysql基于事务处理实现转账功能的方法。分享给大家供大家参考。具体如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
<?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语句如下:
1
2
3
4
5
6
7
8
|
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程序设计有所帮助。