有胆量你就来跟着路老师卷起来! -- 纯干货,技术知识分享
路老师给大家分享PHP语言的知识了,旨在想让大家入门PHP,并深入了解PHP语言。
编辑
接着上篇我们来看下PDO数据库的事务处理。
1 PDO中的事务处理
1.1 事务相关概念
事务(transaction)是由查询和更新语句的序列组成。用begin、start_transaction开始一个事务,rollback回滚事务,commit提交事务。在开始一个事务后,可以有若干个SQL查询或更新语句,每个SQL递交执行后,还应该有判断是否正确执行的语句,以确定下一步是否回滚,若都被正确执行则最后提交事务。事务一旦回滚,数据库则保持开始事务前的状态。所以事务可被称为原子操作,事务中的SQL要么全部执行,要么一句也不执行。可以理解为:一荣俱荣一损俱损。
PDO中实现事务处理的方法如下:
- 开启事务:beginTransaction()方法,该方法将关闭自动提交模式(autocommit),直到事务提交或者回滚后才恢复。
- 提交事务:commit()方法,该方法完成事务的提交操作,成功则返回true,失败则返回false。
- 事务回滚:rollback()方法,该方法执行事务的回滚操作。
1.2 事务案例
现有一个问答网站,路飞提出一个问题需要花费10个积分,娜美回答路飞一个问题,且被路飞采纳,则娜美活得10个积分,且两个事件应该同时完成。任何一个事件出错,则回滚到最初的状态。
创建数据库:
CREATE TABLE `member` ( `id` INT ( 8 ) NOT NULL AUTO_INCREMENT, `nickname` VARCHAR ( 200 ) NOT NULL, `email` VARCHAR ( 200 ) DEFAULT NULL, `phone` VARCHAR ( 11 ) DEFAULT NULL, `level` CHAR ( 10 ) DEFAULT NULL, `credits` INT ( 10 ) NOT NULL DEFAULT '100' COMMENT '积分', PRIMARY KEY ( `id` ) ) ENGINE = MyISAM AUTO_INCREMENT = 5 DEFAULT CHARSET = utf8;
编辑
创建index.php文件
开启事务,执行事务,如果执行成功提示“操作成功”,否则回滚到初始状态。index.php文件具体代码如下:
require "config.php"; try{ //实例化PDO对象,采用new的方式 $pdo = new PDO(DB_DSN,DB_USER,DB_PWD); //关闭自动提交 $options = array(PDO::ATTR_AUTOCOMMIT,0); //开启事务 $pdo->beginTransaction(); $sql='update member set credits = credits-10 where nickname="路飞"'; $result1=$pdo->exec($sql); if($result1==0){ throw new PDOException("路飞扣除积分失败"); } $result2=$pdo->exec('update member set credits=credits+10 where nickname="娜美"'); if($result2==0){ throw new PDOException("娜美获取积分失败"); } //提交事务 $pdo->commit(); echo "采纳成功!"; } catch (PDOException $e) { echo 'sql语句异常:'.$sql."<br>"; echo "Error:".$e->getMessahe()."<br>"; }
执行成功后:
编辑
下一篇 cookie与session