PHP中PDO事务处理操作示例


Posted in PHP onMay 02, 2018

本文实例讲述了PHP中PDO事务处理操作。分享给大家供大家参考,具体如下:

概要:

将多条sql操作(增删改)作为一个操作单元,要么都成功,要么都失败。

单条数据不用事务处理

被操作的表必须是innoDB类型的表(支持事务)

MySQL常用的表类型:MyISAM(非事务)增删改速度快、InnodB(事务型)安全性高

更改表的类型为innoDB类型

mysql> alter table stu engine=innodb;

使用:

在PDO预处理的基础上添加,如下格式:

try{
$m->beginTransaction();//开启事务处理
//PDO预处理以及执行语句...
$m->commit();//提交事务
}catch(PDOException $e){
$m->rollBack();//事务回滚
//相关错误处理
}

示例:

$m = new PDO($dsn,$user,$pwd);
$m->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
try{
$m->beginTransaction();//开启事务处理
$stmt=$m->prepare("insert into stu(name,sex,age,classid)values(?,?,?,?)");
$data=array(
array("user1",1,22,"lamp76"),
array("user2",1,20,"lamp76"),
array("user3",0,22,"lamp76")
);
foreach($data as $v){
$stmt->execute($v);
echo $m->lastInsertId();
}
$m->commit();
echo "提交成功!";
}catch(PDOException $e){
$m->rollBack();//回滚
die("提交失败!");
}

补充:再来一个php使用PDO的mysql事务处理与回滚操作实例分析

概述:

事务(transaction)是由查询和/或更新语句的序列组成。 用 begin、start transaction
开始一个事务,rollback 回滚事务,commit 提交事务。 在开始一个事务后,可以有若干个 SQL 查询或更新语句,每个 SQL
递交执行后,还应该有判断是否正确执行的语句,以确定下一步是否回滚,若都被正确执行则最后提交事务。
事务一旦回滚,数据库则保持开始事务前状态。就好象一个被编辑的文件不存盘退出,自然还是保持文件原来的样子。
所以,事务可被视为原子操作,事务中的 SQL,要么全部执行,要不一句都不执行。

PHP中PDO的MYSQL事务处理步骤:

①.关闭自动提交

②.开启事务处理

③.有异常就自动抛出异常提示再回滚

④.开启自动提交

注意:

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 相关文章推荐
删除及到期域名的查看(抢域名必备哦)
May 14 PHP
PHP多线程抓取网页实现代码
Jul 22 PHP
优化php效率,提高php性能的一些方法
Mar 24 PHP
php ZipArchive压缩函数详解实例
Nov 06 PHP
php获取从百度搜索进入网站的关键词的详细代码
Jan 08 PHP
php json转换成数组形式代码分享
Nov 10 PHP
php中base_convert()进制数字转换函数实例
Nov 20 PHP
分享一则PHP定义函数代码
Feb 26 PHP
CI配置多数据库访问的方法
Mar 28 PHP
PHP关键特性之命名空间实例详解
May 06 PHP
thinkphp5.1 文件引入路径问题及注意事项
Jun 13 PHP
PHP使用redis位图bitMap 实现签到功能
Oct 08 PHP
PHP简单实现解析xml为数组的方法
May 02 #PHP
PHP实现动态压缩js与css文件的方法
May 02 #PHP
Yii2框架数据验证操作实例详解
May 02 #PHP
Yii2框架类自动加载机制实例分析
May 02 #PHP
PHP通过bypass disable functions执行系统命令的方法汇总
May 02 #PHP
购物车实现的几种方式优缺点对比
May 02 #PHP
PHP生成(支持多模板)二维码海报代码
Apr 30 #PHP
You might like
php高级编程-函数-郑阿奇
2011/07/04 PHP
php采用curl访问域名返回405 method not allowed提示的解决方法
2014/06/26 PHP
php使用ereg验证文件上传的方法
2014/12/16 PHP
php curl模拟post请求和提交多维数组的示例代码
2015/11/19 PHP
PHP经典算法集锦【经典收藏】
2016/09/14 PHP
splice slice区别
2006/10/09 Javascript
JS是否可以跨文件同时控制多个iframe页面的应用技巧
2007/12/16 Javascript
javascript void(0)的妙用
2009/10/21 Javascript
JqGrid web打印实现代码
2011/05/31 Javascript
jQuery中live方法的重复绑定说明
2011/10/21 Javascript
jQuery分别获取选中的复选框值的示例
2014/06/17 Javascript
JS弹出层遮罩,隐藏背景页面滚动条细节优化分析
2016/04/29 Javascript
基于JS实现的随机数字抽签实例
2016/12/08 Javascript
Ionic 2 实现列表滑动删除按钮的方法
2017/01/22 Javascript
vue基于Vue2.0和高德地图的地图组件实例
2017/04/28 Javascript
jQuery.Form实现Ajax上传文件同时设置headers的方法
2017/06/26 jQuery
微信小程序引用公共js里的方法的实例详解
2017/08/17 Javascript
vue-router路由模式详解(小结)
2019/08/26 Javascript
python 通过xml获取测试节点和属性的实例
2018/03/31 Python
学习python可以干什么
2019/02/26 Python
Python使用POP3和SMTP协议收发邮件的示例代码
2019/04/16 Python
使用keras2.0 将Merge层改为函数式
2020/05/23 Python
美国迪克体育用品商店:DICK’S Sporting Goods
2018/07/24 全球购物
德国玩具商店:Planet Happy DE
2021/01/16 全球购物
设计毕业生简历中的自我评价
2013/10/01 职场文书
自荐信包含哪些内容
2013/10/30 职场文书
电气专业推荐信范文
2013/11/18 职场文书
十八届三中全会报告学习材料
2014/02/17 职场文书
奠基仪式策划方案
2014/05/15 职场文书
办公室领导干部作风整顿个人整改措施
2014/09/17 职场文书
清洁工岗位职责
2015/02/13 职场文书
政审证明材料
2015/06/19 职场文书
何时使用Map来代替普通的JS对象
2021/04/29 Javascript
教你使用vscode 搭建react-native开发环境
2021/07/07 Javascript
Python使用Beautiful Soup(BS4)库解析HTML和XML
2022/06/05 Python
Java Spring Boot请求方式与请求映射过程分析
2022/06/25 Java/Android