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处理图片变得简单 基于gb库的图片处理类附实例代码下载
May 17 PHP
php中使用Imagick实现图像直方图的实现代码
Aug 30 PHP
PHPEXCEL 使用小记
Jan 06 PHP
PHP5.5在windows安装使用memcached服务端的方法
Apr 16 PHP
PHP开发中常见的安全问题详解和解决方法(如Sql注入、CSRF、Xss、CC等)
Apr 21 PHP
php结合正则批量抓取网页中邮箱地址
May 19 PHP
PHP的关于变量和日期处理的一些面试题目整理
Aug 10 PHP
php strftime函数获取日期时间(switch用法)
May 16 PHP
PHP PDOStatement::debugDumpParams讲解
Jan 30 PHP
PHP中的Iterator迭代对象属性详解
Apr 12 PHP
laravel 实现关闭CSRF(全部关闭、部分关闭)
Oct 21 PHP
Yii 框架使用数据库(databases)的方法示例
May 19 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
使用Apache的htaccess防止图片被盗链的解决方法
2013/04/27 PHP
用Json实现PHP与JavaScript间数据交换的方法详解
2013/06/20 PHP
ThinkPHP中RBAC类的四种用法分析
2014/11/24 PHP
PHP实现的增强性mhash函数
2015/05/27 PHP
showModalDialog 和 showModelessDialog
2007/01/22 Javascript
JS是否可以跨文件同时控制多个iframe页面的应用技巧
2007/12/16 Javascript
js对象之JS入门之Array对象操作小结
2011/01/09 Javascript
javascript高级程序设计第二版第十二章事件要点总结(常用的跨浏览器检测方法)
2012/08/22 Javascript
利用jQuary实现文字浮动提示效果示例代码
2013/12/26 Javascript
JS中的二叉树遍历详解
2016/03/18 Javascript
Angularjs的ng-repeat中去除重复数据的方法
2016/08/05 Javascript
jQuery Mobile和HTML5开发App推广注册页
2016/11/07 Javascript
JavaScript获取tr td 的三种方式全面总结(推荐)
2017/08/15 Javascript
使用vue-cli webpack 快速搭建项目的代码
2018/11/21 Javascript
vue实现计步器功能
2019/11/01 Javascript
ckeditor一键排版功能实现方法分析
2020/02/06 Javascript
React倒计时功能实现代码——解耦通用
2020/09/18 Javascript
Python下的Mysql模块MySQLdb安装详解
2014/04/09 Python
django在接受post请求时显示403forbidden实例解析
2018/01/25 Python
小白如何入门Python? 制作一个网站为例
2018/03/06 Python
利用pandas读取中文数据集的方法
2018/07/25 Python
Python中的单下划线和双下划线使用场景详解
2019/09/09 Python
Python input函数使用实例解析
2019/11/22 Python
python实现读取类别频数数据画水平条形图案例
2020/04/24 Python
Python接口测试结果集实现封装比较
2020/05/01 Python
Python日志处理模块logging用法解析
2020/05/19 Python
解析html5 canvas实现背景鼠标连线动态效果代码
2019/06/17 HTML / CSS
香港家用健身器材、运动器材及健康美容仪器专门店:FitBoxx
2019/12/05 全球购物
递归计算如下递归函数的值(斐波拉契)
2012/02/04 面试题
九年级历史教学反思
2014/01/27 职场文书
岗位职责的构建方法
2014/02/01 职场文书
部门年终奖分配方案
2014/05/07 职场文书
店铺转让协议书
2015/01/29 职场文书
因身体原因离职的辞职信范文
2015/05/12 职场文书
闪闪红星观后感
2015/06/08 职场文书
python3使用diagrams绘制架构图的步骤
2021/04/08 Python