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 相关文章推荐
使用MaxMind 根据IP地址对访问者定位
Oct 09 PHP
基于qmail的完整WEBMAIL解决方案安装详解
Oct 09 PHP
一个数据采集类
Feb 14 PHP
一些 PHP 管理系统程序中的后门
Aug 05 PHP
php 安全过滤函数代码
May 07 PHP
基于Zookeeper的使用详解
May 02 PHP
ThinkPHP采用GET方式获取中文参数查询无结果的解决方法
Jun 26 PHP
php实现用于删除整个目录的递归函数
Mar 16 PHP
PHP使用内置函数生成图片的方法详解
May 09 PHP
PHP实现创建微信自定义菜单的方法示例
Jul 14 PHP
Laravel框架模板继承操作示例
Jun 11 PHP
php设计模式之组合模式实例详解【星际争霸游戏案例】
Mar 27 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
几种显示数据的方法的比较
2006/10/09 PHP
PHP 记录访客的浏览信息方法
2018/01/29 PHP
PHP中abstract(抽象)、final(最终)和static(静态)原理与用法详解
2020/06/05 PHP
本地图片预览(支持IE6/IE7/IE8/Firefox3)经验总结
2013/03/25 Javascript
让jQuery与其他JavaScript库并存避免冲突的方法
2013/12/23 Javascript
利用Angular.js限制textarea输入的字数
2016/10/20 Javascript
原生js实现电商侧边导航效果
2017/01/19 Javascript
Vue Spa切换页面时更改标题的实例代码
2017/07/15 Javascript
微信小程序 rich-text的使用方法
2017/08/04 Javascript
Layui table 组件的使用之初始化加载数据、数据刷新表格、传参数
2017/09/11 Javascript
NodeJs通过async/await处理异步的方法
2017/10/09 NodeJs
Vue实现美团app的影院推荐选座功能【推荐】
2018/08/29 Javascript
微信小程序实现多个按钮的颜色状态转换
2019/02/15 Javascript
vuex实现及简略解析(小结)
2019/03/01 Javascript
深入浅出 Vue 系列 -- 数据劫持实现原理
2019/04/23 Javascript
小程序如何构建骨架屏
2019/05/29 Javascript
Vue中遍历数组的新方法实例详解
2019/07/21 Javascript
js实现购物车商品数量加减
2020/09/21 Javascript
[01:06:54]DOTA2-DPC中国联赛 正赛 SAG vs DLG BO3 第二场 2月28日
2021/03/11 DOTA
通过实例浅析Python对比C语言的编程思想差异
2015/08/30 Python
Python中的字符串替换操作示例
2016/06/27 Python
Python基于win32ui模块创建弹出式菜单示例
2018/05/09 Python
python爬虫模块URL管理器模块用法解析
2020/02/03 Python
使用python无账号无限制获取企查查信息的实例代码
2020/04/17 Python
Python Mock模块原理及使用方法详解
2020/07/07 Python
不可轻视HTML5!App三年内将被html5顶替彻底消失
2015/11/18 HTML / CSS
购买瑞典当代设计的腕表和太阳眼镜:TRIWA
2016/10/30 全球购物
消防安全管理制度
2014/02/01 职场文书
十佳青年事迹材料
2014/08/21 职场文书
机械专业毕业生自我鉴定2014
2014/10/04 职场文书
2014年工作总结与下年工作计划
2014/11/27 职场文书
留学推荐信(中英文版)
2015/03/26 职场文书
农村老人去世追悼词
2015/06/23 职场文书
拒绝盗图!教你怎么用python给图片加水印
2021/06/04 Python
解决Windows Server2012 R2 无法安装 .NET Framework 3.5
2022/04/29 Servers
python playwright之元素定位示例详解
2022/07/23 Python