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 相关文章推荐
开启CURL扩展,让服务器支持PHP curl函数(远程采集)
Mar 19 PHP
jQuery EasyUI API 中文文档 - DateBox日期框
Oct 15 PHP
php抓取页面的几种方法详解
Jun 17 PHP
php pki加密技术(openssl)详解
Jul 01 PHP
跟我学Laravel之请求(Request)的生命周期
Oct 15 PHP
php的GD库imagettftext函数解决中文乱码问题
Jan 24 PHP
php插入排序法实现数组排序实例
Feb 16 PHP
PHP实现事件机制实例分析
Jun 26 PHP
thinkphp3.x中cookie方法的用法分析
May 19 PHP
PHP实现适用于文件内容操作的分页类
Jun 15 PHP
php实现带读写分离功能的MySQL类完整实例
Jul 28 PHP
PHP实现网页内容html标签补全和过滤的方法小结【2种方法】
Apr 27 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
解析如何去掉CodeIgniter URL中的index.php
2013/06/25 PHP
ThinkPHP3.1新特性之对Ajax的支持更加完善
2014/06/19 PHP
PHP批量去除BOM头代码分享
2015/06/26 PHP
PHP编译configure时常见错误的总结
2017/08/17 PHP
来自国外的页面JavaScript文件优化
2010/12/08 Javascript
js改变文章字体大小的实例代码
2013/11/27 Javascript
查找页面中所有类为test的结点的方法
2014/03/28 Javascript
javascript闭包传参和事件的循环绑定示例探讨
2014/04/17 Javascript
使用jquery实现的一个图片延迟加载插件(含图片延迟加载原理)
2014/06/05 Javascript
AngularJS中的过滤器filter用法完全解析
2016/04/22 Javascript
Node.js中npm常用命令大全
2016/06/09 Javascript
bootstrap timepicker在angular中取值并转化为时间戳
2017/06/13 Javascript
详解使用React全家桶搭建一个后台管理系统
2017/11/04 Javascript
vue实现数据控制视图的原理解析
2020/01/07 Javascript
[42:39]老党炸弹人试玩视频
2014/09/03 DOTA
[03:36]DOTA2完美大师赛coL战队趣味视频——我演你猜
2017/11/23 DOTA
使用PYTHON接收多播数据的代码
2012/03/01 Python
python批量生成本地ip地址的方法
2015/03/23 Python
Phantomjs抓取渲染JS后的网页(Python代码)
2016/05/13 Python
Python获取当前路径实现代码
2017/05/08 Python
Python爬虫包BeautifulSoup简介与安装(一)
2018/06/17 Python
5款Python程序员高频使用开发工具推荐
2019/04/10 Python
Python提取转移文件夹内所有.jpg文件并查看每一帧的方法
2019/06/27 Python
Python利用多线程同步锁实现多窗口订票系统(推荐)
2019/12/22 Python
Python递归求出列表(包括列表中的子列表)的最大值实例
2020/02/27 Python
为什么称python为胶水语言
2020/06/16 Python
python利用文件时间批量重命名照片和视频
2021/02/09 Python
CSS Grid布局教程之网格单元格布局
2014/12/30 HTML / CSS
Feelunique美国:欧洲大型的在线美妆零售电商
2018/11/04 全球购物
女大学生个人求职信
2013/12/09 职场文书
药店促销活动策划方案
2014/08/24 职场文书
检察院院长群众路线教育实践活动个人整改措施
2014/10/04 职场文书
党的群众路线教育实践活动批评与自我批评范文
2014/10/16 职场文书
劳动争议和解协议书范本
2014/11/20 职场文书
刑事法律意见书
2015/06/04 职场文书
深入理解Pytorch微调torchvision模型
2021/11/11 Python