php下pdo的mysql事务处理用法实例

作者:shichen2014 时间:2023-11-14 17:44:13 

本文实例讲述了php下pdo的mysql事务处理用法。分享给大家供大家参考。具体分析如下:

php+mysql事务处理的几个步骤:

1.关闭自动提交 2.开启事务处理 3.有异常就自动抛出异常提示再回滚 4.开启自动提交

注意:mysql只有这个InnoDB驱动是支持事务处理的,默认MyIsAM驱动不支持,下面是实例代码:

<?php
    try{
        $pdo=new pdo("mysql:host=localhost;dbname=mydb", "root", "root", array(PDO::ATTR_AUTOCOMMIT=>0));//最后是关闭自动提交
        //$pdo->setAttribute(PDO::ATTR_AUTOCOMMIT, 0);//这个是通过设置属性方法进行关闭自动提交和上面的功能一样
        $pdo->setAttribute(PDO::ATTR_ERRMODE,  PDO::ERRMODE_EXCEPTION);//开启异常处理
    }catch(PDOException $e){
        echo "数据库连接失败:".$e->getMessage();
        exit;
    }
    /*
     * 事务处理
     *
     *   张三从李四那里买了一台 2000 元的电脑
     *     从张三帐号中扣出 2000元
     *     向李四账号中加入 2000元
     *     从商品表中减少一台电脑
     *     MyIsAM  InnoDB
     */
    try{
        $pdo->beginTransaction();//开启事务处理       
        $price=500;
        $sql="update zhanghao set price=price-{$price} where id=1";
        $affected_rows=$pdo->exec($sql);
        if(!$affected_rows)
            throw new PDOException("张三转出失败");//那个错误抛出异常
        $sql="update zhanghao set price=price+{$price} where id=3";
        $affected_rows=$pdo->exec($sql);      
        if(!$affected_rows)
            throw new PDOException("向李四转入失败");
        echo "交易成功!";
        $pdo->commit();//交易成功就提交
    }catch(PDOException $e){
        echo $e->getMessage();
        $pdo->rollback();
    }  
    $pdo->setAttribute(PDO::ATTR_AUTOCOMMIT, 1);//自动提交,如果最后不自动提交,转账是不成功的  
    //设置错误报告模式 ERRMODE_SILENT    ERRMODE_WARNING
?>

希望本文所述对大家的php程序设计有所帮助。

标签:php,pdo,mysql,事务
0
投稿

猜你喜欢

  • 按钮表状态还是表动作?

    2009-03-23 18:21:00
  • Python接单的过程记录分享

    2022-05-24 13:33:23
  • 关于mysql 的时间类型选择

    2024-01-17 11:44:20
  • SQL Server自定义异常raiserror使用示例

    2024-01-22 10:41:08
  • python中文分词,使用结巴分词对python进行分词(实例讲解)

    2023-03-15 13:37:30
  • javascript操作ASP.NET服务器控件

    2023-07-21 15:09:26
  • 微信跳一跳php代码实现

    2024-06-05 09:46:20
  • Linux中Python 环境软件包安装步骤

    2021-04-10 02:41:38
  • ASP程序实现过滤脏话代码

    2008-03-19 12:07:00
  • javascript中的toFixed固定小数位数 简单实例分享

    2024-05-21 10:20:28
  • asp如何制作一个股票滚屏显示面板?

    2010-07-07 12:27:00
  • mysql命令提示行连接乱码的解决

    2024-01-14 11:05:20
  • Python字典中的键映射多个值的方法(列表或者集合)

    2021-03-07 04:50:40
  • python的等深分箱实例

    2022-11-30 01:01:20
  • JS实现文字放大效果的方法

    2024-04-25 13:09:52
  • Python 的 f-string 可以连接字符串与数字的原因解析

    2023-08-21 15:34:41
  • golang类型转换组件Cast的使用详解

    2024-05-08 10:22:01
  • PyTorch 可视化工具TensorBoard和Visdom

    2022-04-28 00:30:41
  • 什么是XSLT,什么是XPath

    2008-01-21 13:12:00
  • Windows 64位下python3安装nltk模块

    2023-11-20 09:42:12
  • asp之家 网络编程 m.aspxhome.com