在执行数据库操作时,有时候希望一段数据库操作同时成功或失败。例如实现银行转账,不可能一方转账数据库操作成功,而另一方接收数据库操作失败,钱没有到账,这就需要在操作数据库时使用事务。
首先将PDO的自动提交设置关闭,然后开始事务,执行数据库操作,最后提交事务。其中如果操作数据库失败则抛出异常,接收异常报错,并回滚事务。
<?php
try{
$options=array(PDO::ATTR_AUTOCOMMIT,0);//关闭数据库自动提交
$pdo=new PDO("mysql:host=localhost;dbname=phpdemo","root","1234",$options);
$pdo->beginTransaction();//事务开始
$sql="update account set money=money-3000 where name='小赵'";
if (!$pdo->exec($sql)){
throw new PDOException("转账失败");
}
$sql2="update account set money=money+3000 where name='小王2'";
if (!$pdo->exec($sql2)){
throw new PDOException("接收失败");
}
$pdo->commit();//提交事务
}catch (PDOException $e){
$pdo->rollBack();//回滚事务
echo $e->getMessage();
}