首页 > 编程语言 >入门PHP就来我这(高级)20 ~ 事务处理

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

时间:2024-07-10 12:55:55浏览次数:10  
标签:10 事务 NULL 20 DEFAULT 回滚 事务处理 credits PHP

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

路老师给大家分享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文件具体代码如下:


<?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群,玩转技术群,该群里功能:分享技能,电子书,源代码,以及兼职项目等交流,欢迎大家加入一起交流。

 

标签:10,事务,NULL,20,DEFAULT,回滚,事务处理,credits,PHP
From: https://blog.csdn.net/weixin_38298363/article/details/140320446

相关文章

  • CvT:微软提出结合CNN的ViT架构 | 2021 arxiv
    CvT将Transformer与CNN在图像识别任务中的优势相结合,从CNN中借鉴了多阶段的层级结构设计,同时引入了ConvolutionalTokenEmbedding和ConvolutionalProjection操作增强局部建模能力,在保持计算效率的同时实现了卓越的性能。此外,由于卷积的引入增强了局部上下文建模能力,CvT不再需要......
  • php webman使用fileboy热加载
    1.下载fileboy文件 下载地址:https://gitee.com/dengsgo/fileboy/releases2.在工作目录创建一个文件夹,把下载的exr文件复制一份到文件夹,重命名为‘fileboy.exe’,添加系统变量PATH:   3.打开cmd命令窗口执行fileboy命令,出现以下图说明配置成功 4.切换到项目根目录,执......
  • 骨传导耳机哪个牌子好?精选2024年度最值得入手的5款骨传导耳机推荐!
    作为在数码耳机领域有着多年工作经验的达人,我见证过骨传导耳机市场的热门,也目睹了不少因盲目选购而导致听力不适或体验不佳的案例。在此,我必须郑重告诫大家,切莫轻信市场上那些夸大其词、声称完美兼顾音质与舒适度的骨传导耳机宣传!实际上,这些劣质机型不仅戴着不舒服,而且音质模糊......
  • 《用Python学数学-2021》 ([美] 彼得 • 法雷尔(Peter Farrell) [Farrell) etc.)
    pan.baidu.com/s/1tIHXj9HmIYojAHqje09DTA?pwd=jqso提取码:jqso一、问题背景高等数学应用非常广,基本上涉及到函数的地方都要用到微积分,还有在几何方面也是如此,计算机的应用让我们能简单快速处理各种高等数学中的计算,比如极限、导数、积分、微分方程等的计算。二、实验目的......
  • P3993 [BJOI2017] 同构 题解
    Description你有\(n\)个点,你可以在这\(n\)个点之间连无向边,两个点之间至多只能连一条边,也不允许连自环,问至多能连多少条边。但这个问题的答案显然是\(\frac{n(n-1)}{2}\)条。所以有一个额外的限制,要求这个图不存在非平凡的自同构。一个图\(G\)有非平凡的自同构定义为存......
  • P5336 [THUSC2016] 成绩单
    P5336[THUSC2016]成绩单考虑这个题,他是随机抽一段,然后剩下的又拼起来,这不符合常规的区间DP。因为他出现这样一种情况,一段数中被扣出若干段,剩下若干段。如图:红色的是被取出的,黑色的是留下的,考虑我们的DP需要包含这样的一个状态,考虑这道题比较特殊,虽然剩下的黑色......
  • 20240709(byte数据转换、字典数据选择性保留、选择性查询数据库)
    需要补的知识:​ 1.HTTP协议,url里,那些header、body里都是啥东西报错信息:"服务异常'bytes'objecthasnoattribute'get'"错误原因:​ http传输中,GET方法传入的是byte格式的数据,没有.get方法#假设你有一个包含JSON数据的字节字符串json_bytes=b'{"name":"John",&quo......
  • [AHOI2013] 差异 题解
    后缀自动机维护子串公共后缀方便一点,所以直接倒序插入字符串即可。我们给所有前缀打上标记,然后跑树形\(dp\),设\(sum_i\)表示第\(i\)个点的子树内有多少个前缀,\(ans\)统计\(\sum\text{LCP}(T_i,T_j)\),则有:\[ans=\sum\limits_{i=1}^{id}\sum\limits_{j\inison}{sum}_j({......
  • 【2024-07-09】大宝要学
    20:00人,只有义无反顾地前行,才能在大地.上留下通往光明的履痕。                                                 ——阿多尼斯7月份,是我们家的生日月份,月初大宝生日,月......
  • php实现中间件功能
    <?php//框架核心应用层$application=function($name){echo"thisisa{$name}application\n";};//前置校验中间件$auth=function($handler){returnfunction($name)use($handler){echo"{$name}needaauthmiddleware\n"......