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中改变图片的尺寸大小的代码
Jul 17 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十六)
Jun 30 PHP
ThinkPHP模板替换与系统常量及应用实例教程
Aug 22 PHP
php获取客户端电脑屏幕参数的方法
Jan 09 PHP
WordPress中邮件的一些修改和自定义技巧
Dec 15 PHP
php自定义时间转换函数示例
Dec 07 PHP
Laravel 5.5官方推荐的Nginx配置学习教程
Oct 06 PHP
php实现算术验证码功能
Dec 05 PHP
Thinkphp5.0 框架实现控制器向视图view赋值及视图view取值操作示例
Oct 12 PHP
PHP7 新增常量
Mar 09 PHP
php微信小程序解包过程实例详解
Mar 31 PHP
Memcached介绍及php-memcache扩展安装
Apr 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
默默简单的写了一个模板引擎
2007/01/02 PHP
php生成局部唯一识别码LUID的代码
2012/10/06 PHP
PHP输出图像imagegif、imagejpeg与imagepng函数用法分析
2016/11/14 PHP
在IE下:float属性会影响offsetTop的取值
2006/12/22 Javascript
JavaScript 定义function的三种方式小结
2009/10/16 Javascript
Firebug入门指南(Firefox浏览器)
2010/08/21 Javascript
javascript题目,重写函数让其无限相加
2012/02/15 Javascript
现如今最流行的JavaScript代码规范
2014/03/08 Javascript
mvvm双向绑定机制的原理和实现代码(推荐)
2016/06/07 Javascript
两行代码轻松搞定JavaScript日期验证
2016/08/03 Javascript
JS实现根据用户输入分钟进行倒计时功能
2016/11/14 Javascript
jQuery点击头像上传并预览图片
2017/02/23 Javascript
Django与Vue语法的冲突问题完美解决方法
2017/12/14 Javascript
layui 实现表格某一列显示图标
2019/09/19 Javascript
python操作ie登陆土豆网的方法
2015/05/09 Python
python清除字符串里非数字字符的方法
2015/07/02 Python
Python的collections模块中namedtuple结构使用示例
2016/07/07 Python
浅谈python中拼接路径os.path.join斜杠的问题
2018/10/23 Python
Python-接口开发入门解析
2019/08/01 Python
树莓派4B+opencv4+python 打开摄像头的实现方法
2019/10/18 Python
Python实现动态给类和对象添加属性和方法操作示例
2020/02/29 Python
pytorch 常用函数 max ,eq说明
2020/06/28 Python
美国最大的宠物药店:1-800-PetMeds
2016/10/02 全球购物
布鲁明戴尔百货店:Bloomingdale’s
2016/12/21 全球购物
哥伦比亚加拿大官网:Columbia Sportswear Canada
2020/09/07 全球购物
GWT都有什么特性
2016/12/02 面试题
大学生职业规划论文
2014/01/11 职场文书
关于读书的演讲稿1000字
2014/08/27 职场文书
节能环保演讲稿
2014/08/28 职场文书
民主评议党员登记表自我评价
2014/10/20 职场文书
留学推荐信怎么写
2015/03/26 职场文书
2015年幼儿园中班下学期工作总结
2015/05/22 职场文书
2016天猫双十一广告语
2016/01/28 职场文书
2019年度行政文员工作计划范本!
2019/07/04 职场文书
python中的class_static的@classmethod的巧妙用法
2021/06/22 Python
苹果发布了MagSafe固件更新,可以不外接电源实现最高7.5W充电
2022/04/21 数码科技