PHP使用pdo实现事务处置操纵示例
发布时间:05/20 来源:未知 浏览:
关键词:
本文实例讲述了PHP使用pdo实现事务处置操纵。分享给大家供大家参考,详细如下:
使用事务的好处:
举个例子:银行会员A向会员B转账100元,这个操纵被分为两个步骤:
(1)A的账户余额被扣去100。
(2)B的账户余额增添100。
如果不使用事务的话,假设(1)施行成功了,而(2)失败了,那会员B没有收到应收款项,而会员A就白白受了亏损。
使用事务之后,不管(1)或者(2)哪一步失败,都可以回滚,即双方的账户余额恢复到此前的状态。
不是所有的数据库都供给了对事务的支撑,如mysql中的 Myisam 引擎不支撑事务,但新版本默许使用的 innoDB 引擎供给了对事务的支撑。(RDBMS大部分支撑事务,NoSQL数据库一般不支撑事务)
下面来看详细的代码:
setAttribute(PDO::ATTR_AUTOCOMMIT, 0); $cash = 100; try { $dbh->beginTransaction(); //会员A账户扣除100 $sqlcmd = "update transaction set useraccount=useraccount - {$cash} where username ='A'"; $affected_rows = $dbh->exec($sqlcmd); if ($affected_rows > 0) { echo "会员A账户扣除成功" . "
"; } else { throw new Exception("会员A账户扣除失败"); } //会员B账户增添100 $affected_rows = $dbh->exec("update transaction set useraccount=useraccount+{$cash} where username ='B'"); if ($affected_rows > 0) { echo "会员B账户增添成功" . "
"; } else { throw new Exception("会员B账户增添失败"); } echo "转账成功"; //若前面两个步骤都成功,则提交事务 $dbh->commit(); } catch (PDOException $e) //若前面两个步骤中出现了异常,则回滚 { echo $e->getMessage(); $dbh->rollback(); } //对事物的使用完毕之后,从新开启主动提交 $dbh->setAttribute(PDO::ATTR_AUTOCOMMIT, 1); ?>