有胆量你就来跟着路老师卷起来! -- 纯干货,技术知识分享
路老师给大家分享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文件具体代码如下:
<?phprequire "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
大家如果喜欢技术,并想有个好的交流平台可以关注我的 我的知乎首页,会不定期分享本人觉得比较好的技术类电子书。
另外,自己创建的一个技术qq群,玩转技术群,该群里功能:分享技能,电子书,源代码,以及兼职项目等交流,欢迎大家加入一起交流。