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


Posted in PHP onDecember 27, 2014

本文实例讲述了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 相关文章推荐
需要发散思维学习PHP
Jun 29 PHP
php 函数使用方法与函数定义方法
May 09 PHP
php中0,null,empty,空,false,字符串关系的详细介绍
Jun 20 PHP
thinkphp文件处理类Dir.class.php的用法分析
Dec 08 PHP
php通过文件流方式复制文件的方法
Mar 13 PHP
php 判断字符串编码是utf-8 或gb2312实例
Nov 01 PHP
php实现微信支付之现金红包
May 30 PHP
Yii框架日志记录Logging操作示例
Jul 12 PHP
Laravel5.5以下版本中如何自定义日志行为详解
Aug 01 PHP
php实现微信企业转账功能
Oct 02 PHP
thinkphp框架使用JWTtoken的方法详解
Oct 10 PHP
laravel 解决Validator使用中出现的问题
Oct 25 PHP
php5.3不能连接mssql数据库的解决方法
Dec 27 #PHP
解决phpcms更换javascript的幻灯片代码调用图片问题
Dec 26 #PHP
php+jQuery.uploadify实现文件上传教程
Dec 26 #PHP
php实现mysql备份恢复分卷处理的方法
Dec 26 #PHP
为PHP5.4开启Zend OPCode缓存
Dec 26 #PHP
Yii中使用PHPExcel导出Excel的方法
Dec 26 #PHP
PHP中mysqli_affected_rows作用行数返回值分析
Dec 26 #PHP
You might like
PHP获取和操作配置文件php.ini的几个函数介绍
2013/06/24 PHP
php实现memcache缓存示例讲解
2013/12/04 PHP
PHP调用wsdl文件类型的接口代码分享
2014/11/19 PHP
php 删除一维数组中某一个值元素的操作方法
2018/02/01 PHP
php爬取天猫和淘宝商品数据
2018/02/23 PHP
ThinkPHP框架下微信支付功能总结踩坑笔记
2019/04/10 PHP
javascript 实现父窗口引用弹出窗口的值的脚本
2007/08/07 Javascript
JavaScript高级程序设计 学习笔记 js高级技巧
2011/09/20 Javascript
JS按字节截取字符长度实例
2013/11/20 Javascript
js 定时器setTimeout无法调用局部变量的解决办法
2013/11/28 Javascript
jQuery学习笔记之基础中的基础
2015/01/19 Javascript
javascript获得当前的信息的一些常用命令
2015/02/25 Javascript
微信小程序 解析网页内容详解及实例
2017/02/22 Javascript
使用npm安装最新版本nodejs
2018/01/18 NodeJs
详解Vuex下Store的模块化拆分实践
2019/07/31 Javascript
jQuery HTML设置内容和属性操作实例分析
2020/05/20 jQuery
[50:29]2014 DOTA2华西杯精英邀请赛 5 24 DK VS iG
2014/05/26 DOTA
[01:05]DOTA2完美大师赛趣味视频之选手教你打职业
2017/11/23 DOTA
通过5个知识点轻松搞定Python的作用域
2016/09/09 Python
Python中使用asyncio 封装文件读写
2016/09/11 Python
详解Python各大聊天系统的屏蔽脏话功能原理
2016/12/01 Python
在python里面运用多继承方法详解
2019/07/01 Python
PyQt5基本控件使用之消息弹出、用户输入、文件对话框的使用方法
2019/08/06 Python
CentOS7下安装python3.6.8的教程详解
2020/01/03 Python
利用python3筛选excel中特定的行(行值满足某个条件/行值属于某个集合)
2020/09/04 Python
python 数据类型强制转换的总结
2021/01/25 Python
CSS3使用border-radius属性制作圆角
2014/12/22 HTML / CSS
CSS3下的渐变文字效果实现示例
2018/03/02 HTML / CSS
Debenhams百货英国官方网站:Debenhams UK
2016/07/12 全球购物
租租车:国际租车、美国租车、欧洲租车、特价预订国外租车(中文服务)
2018/03/28 全球购物
DeinDesign德国:设计自己的手机壳
2019/12/14 全球购物
莫斯科珠宝厂官方网站:Miuz
2020/09/19 全球购物
酒店销售主管岗位职责
2014/01/04 职场文书
社会治安综合治理管理责任书
2014/04/16 职场文书
工作年限证明模板
2015/06/15 职场文书
四大名著读书笔记
2015/06/25 职场文书