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 相关文章推荐
数据库的日期格式转换
Oct 09 PHP
推荐php模板技术[转]
Jan 04 PHP
从一个不错的留言本弄的mysql数据库操作类
Sep 02 PHP
PHP spl_autoload_register实现自动加载研究
Dec 06 PHP
PHP下获取上个月、下个月、本月的日期(strtotime,date)
Feb 02 PHP
Fatal error: session_start(): Failed to initialize storage module: files问题解决方法
May 04 PHP
php实现求相对时间函数
Jun 15 PHP
Discuz!X中SESSION机制实例详解
Sep 23 PHP
如何修改yii2.0自带的user表为其它的表
Aug 01 PHP
laravel实现批量更新多条记录的方法示例
Oct 22 PHP
thinkPHP框架实现的无限回复评论功能示例
Jun 09 PHP
PHP获取学生成绩的方法
Nov 17 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
改变Apache端口等配置修改方法
2008/06/05 PHP
PHP file_get_contents 函数超时的几种解决方法
2009/07/30 PHP
PHP 字符串分割和比较
2009/10/06 PHP
如何使用Linux的Crontab定时执行PHP脚本的方法
2011/12/19 PHP
PHP实现根据数组的值进行分组的方法
2017/04/20 PHP
PHP文件管理之实现网盘及压缩包的功能操作
2017/09/20 PHP
PHP操作Postgresql封装类与应用完整实例
2018/04/24 PHP
PHP实现的操作数组类库定义与用法示例
2019/05/24 PHP
PHP CURL实现模拟登陆并上传文件操作示例
2020/01/02 PHP
PHP延迟静态绑定使用方法实例解析
2020/09/05 PHP
javascript写的日历类(基于pj)
2010/12/28 Javascript
ajax+jQuery实现级联显示地址的方法
2015/05/06 Javascript
简述Jquery与DOM对象
2015/07/10 Javascript
用jquery获取自定义的标签属性的值简单实例
2016/09/17 Javascript
深究AngularJS中$sce的使用
2017/06/12 Javascript
docker中编译nodejs并使用nginx启动
2017/06/23 NodeJs
nodejs超出最大的调用栈错误问题
2017/12/27 NodeJs
使用纯前端JavaScript实现Excel导入导出方法过程详解
2020/08/07 Javascript
nodejs+koa2 实现模仿springMVC框架
2020/10/21 NodeJs
[01:12]DOTA2 2015年秋季互动指南
2015/11/10 DOTA
[01:30]我们共输赢 完美世界城市挑战赛开启全新赛季
2019/04/19 DOTA
Python基于递归算法实现的走迷宫问题
2017/08/04 Python
python生成excel的实例代码
2017/11/08 Python
python实现excel读写数据
2021/03/02 Python
python3模块smtplib实现发送邮件功能
2018/05/22 Python
python中sys.argv函数精简概括
2018/07/08 Python
Django项目使用CircleCI的方法示例
2019/07/14 Python
python cumsum函数的具体使用
2019/07/29 Python
python opencv将图片转为灰度图的方法示例
2019/07/31 Python
CSS3教程(2):网页边框半径和网页圆角
2009/04/02 HTML / CSS
大学生的应聘自我评价
2013/12/13 职场文书
挂职自我鉴定
2014/02/26 职场文书
校园公益广告语
2014/03/13 职场文书
入团介绍人意见范文
2015/06/04 职场文书
晚会开幕词范文
2016/03/04 职场文书
CentOS 7安装mysql5.7使用XtraBackUp备份工具命令详解
2022/04/12 MySQL