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 相关文章推荐
PHP XML备份Mysql数据库
May 27 PHP
php $_ENV为空的原因分析
Jun 01 PHP
CodeIgniter上传图片成功的全部过程分享
Aug 12 PHP
PHP 验证码不显示只有一个小红叉的解决方法
Sep 30 PHP
jQuery+PHP+ajax实现微博加载更多内容列表功能
Jun 27 PHP
Codeigniter中mkdir创建目录遇到权限问题和解决方法
Jul 25 PHP
php实现的mongodb操作类实例
Apr 03 PHP
PHP实现通过URL提取根域名
Mar 31 PHP
php获取文章内容第一张图片的方法示例
Jul 03 PHP
PHP实现合并两个排序链表的方法
Jan 19 PHP
php实现微信原生支付(扫码支付)功能
May 30 PHP
PHP压缩图片功能的介绍
Mar 21 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
smarty模板引擎基础知识入门
2015/03/30 PHP
PHP对象、模式与实践之高级特性分析
2016/12/08 PHP
PHP检查网站是否宕机的方法示例
2017/07/24 PHP
对xmlHttp对象的理解
2011/01/17 Javascript
jQuery prev ~ siblings选择器使用介绍
2013/08/09 Javascript
ExtJS[Desktop]实现图标换行示例代码
2013/11/17 Javascript
JS数组的常见用法实例
2015/02/10 Javascript
jQuery设置和移除文本框默认值的方法
2015/03/09 Javascript
JS+CSS实现自动切换的网页滑动门菜单效果代码
2015/09/14 Javascript
js css+html实现简单的日历
2016/07/14 Javascript
使用jQuery实现一个类似GridView的编辑,更新,取消和删除的功能
2017/03/15 Javascript
JavaScript禁止微信浏览器下拉回弹效果
2017/05/16 Javascript
js防抖和节流的深入讲解
2018/12/06 Javascript
解决Vue打包上线之后部分CSS不生效的问题
2019/11/12 Javascript
通过angular CDK实现页面元素拖放的步骤详解
2020/07/01 Javascript
[10:39]DOTA2上海特级锦标赛音乐会纪录片
2016/03/21 DOTA
Python运行的17个时新手常见错误小结
2012/08/07 Python
python提取内容关键词的方法
2015/03/16 Python
深入解析Python中的集合类型操作符
2015/08/19 Python
深入解析Python中的变量和赋值运算符
2015/10/12 Python
Python入门教程之运算符与控制流
2016/08/17 Python
Flask之flask-script模块使用
2018/07/26 Python
python实现二级登陆菜单及安装过程
2019/06/21 Python
在python中创建指定大小的多维数组方式
2019/11/28 Python
PyTorch笔记之scatter()函数的使用
2020/02/12 Python
浅析HTML5页面元素及属性
2021/01/20 HTML / CSS
英国领先的品牌珠宝和配件供应商:Acotis Jewellery
2018/03/07 全球购物
欧洲最古老的鞋厂:Peter Kaiser
2019/11/05 全球购物
招聘专员岗位职责
2014/03/07 职场文书
小学班长竞选演讲稿
2014/04/24 职场文书
小学捐书活动总结
2014/07/05 职场文书
销售人员工作自我评价
2014/09/21 职场文书
课外活动实习计划
2015/01/19 职场文书
宣传部部长竞选稿
2015/11/21 职场文书
python urllib库的使用详解
2021/04/13 Python
图解排序算法之希尔排序Java实现
2021/06/26 Java/Android