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 相关文章推荐
我的论坛源代码(二)
Oct 09 PHP
php split汉字
Jun 05 PHP
php面向对象全攻略 (十四) php5接口技术
Sep 30 PHP
基于PHP选项与信息函数的使用详解
May 10 PHP
如何修改和添加Apache的默认站点目录
Jul 05 PHP
php实例分享之html转为rtf格式
Jun 02 PHP
PHP 双链表(SplDoublyLinkedList)简介和使用实例
May 12 PHP
PHP附件下载中文名称乱码的解决方法
Dec 17 PHP
PHP错误处理函数
Apr 03 PHP
Yii2语言国际化自动配置详解
Aug 22 PHP
PHP实现函数内修改外部变量值的方法示例
Dec 28 PHP
用PHP的反射实现委托模式的讲解
Mar 22 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中fsockopen用法实例
2015/01/05 PHP
用PHP去掉文件头的Unicode签名(BOM)方法
2017/06/22 PHP
PHP使用微信开发模式实现搜索已发送图文及匹配关键字回复的方法
2017/09/13 PHP
php静态成员方法和静态的成员属性的使用方法
2017/10/26 PHP
Jquery创建层显示标题和内容且随鼠标移动而移动
2014/01/26 Javascript
jquery通过select列表选择框对表格数据进行过滤示例
2014/05/07 Javascript
详解JavaScript中void语句的使用
2015/06/04 Javascript
JavaScript声明变量名的语法规则
2015/07/10 Javascript
jQuery的position()方法详解
2015/07/19 Javascript
JavaScript计算器网页版实现代码分享
2016/07/15 Javascript
JS 实现 ajax 异步浏览器兼容问题
2017/01/21 Javascript
node.js学习之事件模块Events的使用示例
2017/09/28 Javascript
react实现菜单权限控制的方法
2017/12/11 Javascript
解决vue页面刷新或者后退参数丢失的问题
2018/03/13 Javascript
原生JS进行前后端同构
2018/04/22 Javascript
手把手教你用Node.js爬虫爬取网站数据的方法
2018/07/05 Javascript
解决vue中修改了数据但视图无法更新的情况
2018/08/27 Javascript
详解vue-cli 3.0 build包太大导致首屏过长的解决方案
2018/11/10 Javascript
JavaScript类的继承操作实例总结
2018/12/20 Javascript
Vue + Elementui实现多标签页共存的方法
2019/06/12 Javascript
CountUp.js数字滚动插件使用方法详解
2019/10/17 Javascript
JavaScript代理模式原理与用法实例详解
2020/03/10 Javascript
[02:06]DOTA2肉山黑名单魔法终结者 敌法师中文配音鉴赏
2013/06/17 DOTA
[51:06]DOTA2-DPC中国联赛 正赛 Elephant vs Aster BO3 第二场 1月26日
2021/03/11 DOTA
Python linecache.getline()读取文件中特定一行的脚本
2008/09/06 Python
python3利用venv配置虚拟环境及过程中的小问题小结
2018/08/01 Python
OpenCV里的imshow()和Matplotlib.pyplot的imshow()的实现
2019/11/25 Python
澳大利亚领先的孕妇服装品牌:Mamaway
2018/08/14 全球购物
求职意向书
2014/04/01 职场文书
班主任寄语大全
2014/04/04 职场文书
贷款委托书怎么写
2014/08/02 职场文书
超市工作总结范文2014
2014/12/19 职场文书
安全保证书格式
2015/02/28 职场文书
《检阅》教学反思
2016/02/22 职场文书
Z-Order加速Hudi大规模数据集方案分析
2022/03/31 Servers
详解SQL的窗口函数
2022/04/21 Oracle