本文实例讲述了php+Mysqli利用事务处理转账问题的方法。分享给大家供大家参考
?
|
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
|
<?php
header("Content-type:text/html; charset=utf-8");
$mysqli = new mysqli("localhost", "root", "064319", "php");
$mysqli->set_charset("utf8");
if($mysqli->connect_errno) {
die('数据库连接失败'.$mysqli->connect_error);
}
$mysqli->autocommit(false); //自动提交模式设为false
$flag = true; //事务是否成功执行的标志
$query = "update account set balance=balance-1000 where id=3";
$result = $mysqli->query($query);
$affected_count = $mysqli->affected_rows;
if(!result || $affected_count == 0) { //失败
$flag = false;
}
$query = "update account set balance=balance+1000 where id=2";
$result = $mysqli->query($query);
$affected_count = $mysqli->affected_rows;
if(!$result || $affected_count == 0) {
$flag = false;
}
if($flag) {
$mysqli->commit();
echo '转账成功';
} else {
$mysqli->rollback();
echo '转账失败';
}
$mysqli->autocommit(true); //重新设置事务为自动提交
$mysqli->close();
?>
|
代码二:
?
|
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
|
<?php
try{
$pdo=new PDO("mysql:host=localhost;dbname=psp","root","");
$pdo->exec("set names utf8");
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);//设置异常处理模式
$pdo->setAttribute(PDO::ATTR_AUTOCOMMIT,0);//关闭自动提交
}catch(PDOException $e){
echo "数据库连接失败";
exit;
}
try{
$age=10;
$pdo->beginTransaction();//开始事务
$affected_rows1=$pdo->exec("update kfry set k_age=k_age+{$age} where k_name='user1'");
$affected_rows2=$pdo->exec("update kfry set k_age=k_age-{$age} where k_name='user2'");//随意更改使之执行成功或失败
/* if($affected_rows1&&$affected_rows2)
{
$pdo->commit();
echo "操作成功";
}else{
$pdo->rollback();
} */
if(!$affected_rows1)
throw new PDOException("加入错误");
if(!$affected_rows2)
throw new PDOException("减少错误");
echo "操作成功";
$pdo->commit();//如果执行到此处前面两个更新sql语句执行成功,整个事务执行成功
}catch(PDOException $e){
echo "操作失败:".$e->getMessage();
$pdo->rollback();//执行事务中的语句出了问题,整个事务全部撤销
}
$pdo->setAttribute(PDO::ATTR_AUTOCOMMIT,1);
//测试是否成功
echo "\\n操作结果为:\\n";
$sql="select * from kfry";
$result=$pdo->query($sql);
foreach($result as $v)
{
echo $v['k_name']." ".$v['k_age']."\\n";
}
?>
|
以上所述就是本文的全部内容了,希望大家能够喜欢。
相关文章
猜你喜欢
- 64M VPS建站:是否适合初学者操作和管理? 2025-06-10
- ASP.NET自助建站系统中的用户注册和登录功能定制方法 2025-06-10
- ASP.NET自助建站系统的域名绑定与解析教程 2025-06-10
- 个人服务器网站搭建:如何选择合适的服务器提供商? 2025-06-10
- ASP.NET自助建站系统中如何实现多语言支持? 2025-06-10
TA的动态
- 2025-07-10 怎样使用阿里云的安全工具进行服务器漏洞扫描和修复?
- 2025-07-10 怎样使用命令行工具优化Linux云服务器的Ping性能?
- 2025-07-10 怎样使用Xshell连接华为云服务器,实现高效远程管理?
- 2025-07-10 怎样利用云服务器D盘搭建稳定、高效的网站托管环境?
- 2025-07-10 怎样使用阿里云的安全组功能来增强服务器防火墙的安全性?
快网idc优惠网
QQ交流群
您的支持,是我们最大的动力!
热门文章
-
2025-05-25 30
-
2025-06-04 17
-
2025-05-27 20
-
2025-06-05 17
-
2025-06-04 45
热门评论

