Home > php教程 > php手册 > php下pdo的mysql事务处理应用实例

php下pdo的mysql事务处理应用实例

WBOY
Release: 2016-05-25 16:37:51
Original
1230 people have browsed it

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;//开源代码phprm.com 
} 
/* 
 * 事务处理 
 * 
 *   张三从李四那里买了一台 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
Copy after login


本文地址:

转载随意,但请附上文章地址:-)

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Recommendations
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template