本文实例讲述了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程序设计有所帮助。