入门PHP就来我这(高级)20 ~ 事务处理

有胆量你就来跟着路老师卷起来!-- 纯干货,技术知识分享

路老师给大家分享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个积分,且两个事件应该同时完成。任何一个事件出错,则回滚到最初的状态。

创建数据库:

sql 复制代码
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文件具体代码如下:

php 复制代码
<?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

大家如果喜欢技术,并想有个好的交流平台可以关注我的 我的知乎首页,会不定期分享本人觉得比较好的技术类电子书。
另外,自己创建的一个技术qq群,玩转技术群,该群里功能:分享技能,电子书,源代码,以及兼职项目等交流,欢迎大家加入一起交流。
相关推荐
一只小bit1 分钟前
Redis哨兵机制、主从复制与集群搭建与维护
数据库·redis·bootstrap
Chester_19996 小时前
CSP202203C.计算资源调度器
开发语言·数据结构·c++·蓝桥杯
zlwool7 小时前
图纸管理选型避坑指南
数据库·erp·设备erp·非标机械
EXI-小洲7 小时前
Java 操作 Word:字符串替换、图片插入、动态生成表格与API接口下载
java·开发语言·spring boot·word
会周易的程序员8 小时前
给 PLC 写一个字节码虚拟机:STVM 虚拟机架构设计
开发语言·c++·虚拟机·软plc·iec61131·stvm
机器视觉知识推荐、就业指导8 小时前
为什么老说“纯 Qt 没啥就业市场”?
开发语言·qt
telepan8 小时前
Qt 开发避坑与性能指南:如何优雅、安全地定义全局常量字符串?
开发语言·qt
小灰灰搞电子8 小时前
完全驾驭 Qt 与数据库:C++ ORM 框架 QxOrm 原理与实践指南
数据库·c++·qt
m0_695251498 小时前
Qt MaintenanceTool 使用国内镜像加速下载(超详细教程)
开发语言·qt
大衛說9 小时前
《Python 从入门到精通》系列总览与学习路线
开发语言·python·学习