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入门之连接mysql数据库的一个类
Apr 21 PHP
解析CI的AJAX分页 另类实现方法
Jun 27 PHP
php检查页面是否被百度收录
Oct 28 PHP
Zend Framework教程之Loader以及PluginLoader用法详解
Mar 09 PHP
Zend Framework教程之Zend_Db_Table_Row用法实例分析
Mar 21 PHP
让你的PHP7更快之Hugepage用法分析
May 31 PHP
PHP命名空间namespace用法实例分析
Sep 27 PHP
Yii针对添加行的增删改查操作示例
Oct 18 PHP
Yii2框架可逆加密简单实现方法
Aug 25 PHP
PHP删除数组中特定元素的两种方法
Feb 28 PHP
基于Laravel(5.4版本)的基本增删改查操作方法
Oct 11 PHP
php设计模式之正面模式实例分析【星际争霸游戏案例】
Mar 24 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
WAR3重制版DOTA 5V5初体验
2020/04/09 DOTA
PHP与SQL注入攻击[一]
2007/04/17 PHP
PHP中定义数组常量(array常量)的方法
2014/11/17 PHP
如何通过Linux命令行使用和运行PHP脚本
2015/07/29 PHP
php使用自定义函数实现汉字分割替换功能示例
2017/01/30 PHP
JavaScript:new 一个函数和直接调用函数的区别分析
2013/07/10 Javascript
Javascript浮点数乘积运算出现多位小数的解决方法
2014/02/17 Javascript
javascript实现滑动解锁功能
2014/12/31 Javascript
javascript清空table表格的方法
2015/05/14 Javascript
基于RequireJS和JQuery的模块化编程日常问题解析
2016/04/14 Javascript
jQuery获取file控件中图片的宽高与大小
2016/08/04 Javascript
JS实现超简单的汉字转拼音功能示例
2016/12/22 Javascript
简单实现js选项卡切换效果
2017/02/09 Javascript
vue2.0实现倒计时的插件(时间戳 刷新 跳转 都不影响)
2017/03/30 Javascript
jsTree事件和交互以及插件plugins详解
2017/08/29 Javascript
JavaScript实现随机数生成器(去重)
2017/10/13 Javascript
Vue2.0学习系列之项目上线的方法步骤(图文)
2018/09/25 Javascript
微信小程序自定义键盘 内部虚拟支付
2018/12/20 Javascript
vue 搭建后台系统模块化开发详解
2019/05/01 Javascript
JS数组splice操作实例分析
2019/10/12 Javascript
纯js+css实现仿移动端淘宝网站的弹出详情框功能
2019/12/29 Javascript
JS面向对象编程基础篇(二) 封装操作实例详解
2020/03/03 Javascript
vue-cli3 热更新配置操作
2020/09/18 Javascript
[03:01]完美盛典趣味短片 DOTA2年度最佳&拉胯英雄
2019/12/07 DOTA
分析Python读取文件时的路径问题
2018/02/11 Python
在Python中使用defaultdict初始化字典以及应用方法
2018/10/31 Python
Python pygame绘制文字制作滚动文字过程解析
2019/12/12 Python
基于Python制作一副扑克牌过程详解
2020/10/19 Python
python定时截屏实现
2020/11/02 Python
苹果台湾官网:Apple台湾
2019/01/05 全球购物
什么是Connection-oriented Protocol/Connectionless Protocol面向连接的协议/无连接协议
2012/09/06 面试题
十八大感想感言
2014/02/10 职场文书
励志演讲稿500字
2014/08/21 职场文书
行政工作试用期自我评价
2014/09/14 职场文书
python图片灰度化处理的几种方法
2021/06/23 Python
总结python多进程multiprocessing的相关知识
2021/06/29 Python