php下pdo的mysql事务处理用法实例_php技巧

本文实例讲述了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程序设计有所帮助。

时间: 2024-09-26 23:12:18

php下pdo的mysql事务处理用法实例_php技巧的相关文章

php的curl封装类用法实例_php技巧

本文实例讲述了两个php curl封装类的用法实例,这两个函数可以让我们非常的方便的使用php curl相关函数.分享给大家供大家参考.具体如下: 使用函数之前我们要需要把php curl模块打开(libeay32.dll, ssleay32.dll, php5ts.dll, php_curl.dll) 开启php curl函数库的步骤 1).去掉windows/php.ini 文件里;extension=php_curl.dll前面的; /*用 echo phpinfo();查看php.ini

PHP实现PDO的mysql数据库操作类_php技巧

本文实例讲述了PHP实现PDO的mysql数据库操作类.分享给大家供大家参考.具体分析如下: dbconfig类负责配置数据库访问信息,包括:服务器地址.端口.数据库实例名.用户名.用户密码.字符集等. dbtemplate类集合了对数据库的访问操作,主要有以下几个操作: 1. queryrows:返回多行记录 2. queryrow:返回为单条记录 3. queryforint:查询单字段,返回整数 4. queryforfloat:查询单字段,返回浮点数(float) 5. queryfor

php文件压缩之PHPZip类用法实例_php技巧

本文实例讲述了php文件压缩之PHPZip类用法.分享给大家供大家参考.具体如下: <?php // // PHPZip v1.2 by Sext (sext@neud.net) // // Makes zip archive // // Based on "Zip file creation class", uses zLib // // class PHPZip { function Zip($dir, $zipfilename) { if (@function_exists

微信公众平台之快递查询功能用法实例_php技巧

本文实例讲述了微信公众平台之快递查询功能用法.分享给大家供大家参考.具体如下: 使用方法: #查快递(或三个首字母ckd)#快递编号#快递单号 如(查询EMS单号为1034616494006的快递): #ckd#15#1034616494006 常用快递编号:<br /> 15EMS,56申通,57顺丰,77圆通, 80韵达,87中通,85宅急送,62天天 1. class.base.php文件: <?php /** * 微信公众平台基础类 For Fshare * @author: S

PHP中addslashes()和stripslashes()实现字符串转义和还原用法实例_php技巧

本文实例讲述了PHP中addslashes()和stripslashes()实现字符串转义和还原用法.分享给大家供大家参考,具体如下: PHP中addslashes() 函数返回在预定义字符之前添加反斜杠的字符串. 预定义字符是: 单引号(') 双引号(") 反斜杠(\) NULL stripslashes() 函数删除由 addslashes() 函数添加的反斜杠. 用法示例如下: <?php $str="select * from `book` where bookname=

php类的定义与继承用法实例_php技巧

本文实例讲述了php类的定义与继承用法.分享给大家供大家参考.具体如下: <?php /* * class */ class people { public $name; public $age; function __construct($namec,$agec) { $this->name = $namec; $this->age = $agec; } protected function getmessage() { return "姓名:".$this->

PHP获取文件夹大小函数用法实例_php技巧

本文实例讲述了PHP获取文件夹大小函数用法.分享给大家供大家参考.具体如下: <?php // 获取文件夹大小 function getDirSize($dir) { $handle = opendir($dir); while (false!==($FolderOrFile = readdir($handle))) { if($FolderOrFile != "." && $FolderOrFile != "..") { if(is_dir(

php获得网站访问统计信息类Compete API用法实例_php技巧

本文实例讲述了php获得网站访问统计信息类Compete API用法.分享给大家供大家参考.具体如下: 这里使用php获得网站访问统计信息类Compete API,Compete是一个专门用来统计网站信息的网站 <?php // Check for dependencies if (!function_exists('curl_init')) throw new Exception('Compete needs the CURL PHP extension.'); if (!function_e

php过滤html标记属性类用法实例_php技巧

本文实例讲述了php 过滤html标记属性类及其用法.是PHP项目开发中比较常见的实用技巧.分享给大家供大家参考.具体方法如下: HtmlAttributeFilter.class.php类文件如下: <?php /** HTML Attribute Filter * Date: 2013-09-22 * Author: fdipzone * ver: 1.0 * * Func: * public strip 过滤属性 * public setAllow 设置允许的属性 * public set