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中使用灵巧的体系结构
Oct 09 PHP
很好用的PHP数据库类
May 27 PHP
php中取得文件的后缀名?
Feb 20 PHP
thinkphp3.0 模板中函数的使用
Nov 13 PHP
Codeigniter框架的更新事务(transaction)BUG及解决方法
Jul 25 PHP
php中常见的sql攻击正则表达式汇总
Nov 06 PHP
php实现每天自动变换随机问候语的方法
May 12 PHP
怎样搭建PHP开发环境
Jul 28 PHP
Yii多表联合查询操作详解
Jun 02 PHP
PHP实现图片的等比缩放和Logo水印功能示例
May 04 PHP
PHP编程快速实现数组去重的方法详解
Jul 22 PHP
laravel 获取某个查询的查询SQL语句方法
Oct 12 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
基于asp+ajax和数据库驱动的二级联动菜单
2010/05/06 PHP
PHP时间戳 strtotime()使用方法和技巧
2013/10/29 PHP
php把session写入数据库示例
2014/02/26 PHP
Yii视图CGridView实现操作按钮定义地址示例
2016/07/14 PHP
php 开发中加密的几种方法总结
2017/03/22 PHP
基于thinkPHP3.2实现微信接入及查询token值的方法
2017/04/18 PHP
PHP实现网站访问量计数器
2017/10/27 PHP
JavaScript调用Activex控件的事件的实现方法
2010/04/11 Javascript
jquery无缝向上滚动实现代码
2013/03/29 Javascript
js实现弹窗插件功能实例代码分享
2013/12/12 Javascript
JavaScript关闭当前页面(窗口)不带任何提示
2014/03/26 Javascript
jQuery截取指定长度字符串的实现原理及代码
2014/07/01 Javascript
js实现固定显示区域内自动缩放图片的方法
2015/07/18 Javascript
BootStrap表单时间选择器详解
2017/05/09 Javascript
一个Js文件函数中调用另一个Js文件函数的方法演示
2017/08/14 Javascript
thinkjs 文件上传功能实例代码
2017/11/08 Javascript
基于openlayers4实现点的扩散效果
2020/08/17 Javascript
JavaScript 日期时间选择器一些小结
2018/04/02 Javascript
vue项目中jsonp跨域获取qq音乐首页推荐问题
2018/05/30 Javascript
微信小程序实现卡片层叠滑动效果
2019/06/21 Javascript
node后端服务保活的实现
2019/11/10 Javascript
浅谈vue在html中出现{{}}的原因及解决方式
2020/11/16 Javascript
在Python的gevent框架下执行异步的Solr查询的教程
2015/04/16 Python
基于python socketserver框架全面解析
2017/09/21 Python
pandas 快速处理 date_time 日期格式方法
2018/11/12 Python
python读取各种文件数据方法解析
2018/12/29 Python
Python搭建Spark分布式集群环境
2019/07/05 Python
Python字典推导式将cookie字符串转化为字典解析
2019/08/10 Python
Python 给下载文件显示进度条和下载时间的实现
2020/04/02 Python
C#实现启动一个进程
2016/10/01 面试题
静态成员和非静态成员的区别
2012/05/12 面试题
电大学习个人自我评价范文
2013/10/04 职场文书
三年级学生评语
2014/04/23 职场文书
《小鹰学飞》教学反思
2014/04/23 职场文书
房屋授权无偿使用证明
2014/11/29 职场文书
紧急迫降观后感
2015/06/15 职场文书