通过pdo事务来实现一个转账的例子:
<?php
include("pdo.php");
try{
//0表示取消自动提交
$pdo -> setAttribute(PDO::ATTR_AUTOCOMMIT,0);
$pdo -> beginTransaction();
$sql = "UPDATE cash SET money = money - 50 WHERE username = 'lilei'";
$affectedRow = $pdo -> exec($sql);
if(!$affectedRow){
throw new PDOException("转出失败");
}
$sql = "UPDATE cash SET money = money +50 WHERE username = 'hanmeimei' ";
$affectedRow = $pdo -> exec($sql);
if(!$affectedRow){
throw new PDOException("转出失败");
}
$pdo -> commit();
echo "汇款成功";
}
catch(PDOException $e){
$pdo -> rollback();
$e -> getMessage();
$e -> getLine();
$e -> getCode();
$e -> getFile();
}
$pdo -> setAttribute(PDO::ATTR_AUTOCOMMIT,1);
?>
初始数据:
![](https://img.haomeiwen.com/i4387317/cb70e53eb5b98fd9.png)
执行一次程序后:
![](https://img.haomeiwen.com/i4387317/0975d7fe6989bbdf.png)
查看数据库信息:
![](https://img.haomeiwen.com/i4387317/0182a8b22bb98c09.png)
若将上述代码中lilei的名字故意写错:
会触发异常并回滚:
![](https://img.haomeiwen.com/i4387317/02f4fbf07e106f67.png)
查看数据库,发现已经回滚:
![](https://img.haomeiwen.com/i4387317/6d527bf88339d11d.png)
网友评论