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 相关文章推荐
模拟SQLSERVER的两个函数:dateadd(),datediff()
Oct 09 PHP
简单的用PHP编写的导航条程序
Oct 09 PHP
php常用ODBC函数集(详细)
Jun 24 PHP
常用PHP框架功能对照表
Oct 23 PHP
php检索或者复制远程文件的方法
Mar 13 PHP
php无限分类使用concat如何实现
Nov 05 PHP
利用php实现一周之内自动登录存储机制(cookie、session、localStorage)
Oct 31 PHP
php微信开发之自定义菜单实现
Nov 18 PHP
PHP面向对象五大原则之开放-封闭原则(OCP)详解
Apr 04 PHP
php app支付宝回调(异步通知)详解
Jul 25 PHP
PHP 结合 Boostrap 结合 js 实现学生列表删除编辑及搜索功能
May 21 PHP
PHP大文件切割上传并带进度条功能示例
Jul 01 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
ThinkPHP无限级分类原理实现留言与回复功能实例
2014/10/31 PHP
PHP结合jquery ajax实现上传多张图片,并限制图片大小操作示例
2019/03/01 PHP
写入cookie的JavaScript代码库 cookieLibrary.js
2009/10/24 Javascript
读JavaScript DOM编程艺术笔记
2011/11/15 Javascript
漂亮的jquery提示效果(仿腾讯弹出层)
2013/02/05 Javascript
在JavaScript中正确引用bind方法的应用
2015/05/11 Javascript
使用javascript将时间转换成今天,昨天,前天等格式
2015/06/25 Javascript
Bootstrap每天必学之表单
2015/11/23 Javascript
jquery tmpl模板(实例讲解)
2017/09/02 jQuery
百度地图去掉marker覆盖物或者去掉maker的label文字方法
2018/01/26 Javascript
vue中设置、获取、删除cookie的方法
2018/09/21 Javascript
vue+element+Java实现批量删除功能
2019/04/08 Javascript
小程序实现分类页
2019/07/12 Javascript
Python 元类使用说明
2009/12/18 Python
python中readline判断文件读取结束的方法
2014/11/08 Python
Python原始字符串与Unicode字符串操作符用法实例分析
2017/07/22 Python
Python实现获取nginx服务器ip及流量统计信息功能示例
2018/05/18 Python
python调用OpenCV实现人脸识别功能
2018/05/25 Python
对python 数据处理中的LabelEncoder 和 OneHotEncoder详解
2018/07/11 Python
浅谈对pytroch中torch.autograd.backward的思考
2019/12/27 Python
python实现同一局域网下传输图片
2020/03/20 Python
python 浮点数四舍五入需要注意的地方
2020/08/18 Python
python Matplotlib数据可视化(2):详解三大容器对象与常用设置
2020/09/30 Python
洛杉矶时尚女装系列:J.ING US
2019/03/17 全球购物
你对IPv6了解程度
2016/02/09 面试题
捐资助学倡议书
2014/04/15 职场文书
应聘英语教师求职信
2014/04/24 职场文书
党的群众路线教育实践方案
2014/05/11 职场文书
房屋出租委托书格式
2014/09/23 职场文书
早读课迟到检讨书
2014/09/25 职场文书
办公室主任四风问题对照检查材料思想汇报
2014/09/28 职场文书
学校运动会广播稿
2014/10/11 职场文书
周年庆典答谢词
2015/01/20 职场文书
2016党员学习作风建设心得体会
2016/01/21 职场文书
合作意向书范本
2019/04/17 职场文书
Spring Boot 使用 Spring-Retry 进行重试框架
2022/04/24 Java/Android