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 相关文章推荐
WinXP + Apache +PHP5 + MySQL + phpMyAdmin安装全功略
Jul 09 PHP
使用eAccelerator加密PHP程序
Oct 03 PHP
AMFPHP php远程调用(RPC, Remote Procedure Call)工具 快速入门教程
May 10 PHP
解析PHP中数组元素升序、降序以及重新排序的函数
Jun 20 PHP
PHP屏蔽过滤指定关键字的方法
Nov 03 PHP
PHP模拟asp中response类实现方法
Aug 08 PHP
PHP房贷计算器实例代码,等额本息,等额本金
Apr 01 PHP
PHP基于IMAP收取邮件的方法示例
Aug 07 PHP
PHP运用foreach神奇的转换数组(实例讲解)
Feb 01 PHP
PHP文件操作实例总结【文件上传、下载、分页】
Dec 08 PHP
PHP批斗大会之缺失的异常详解
Jul 09 PHP
Laravel框架Eloquent ORM删除数据操作示例
Dec 03 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
php 缓存函数代码
2008/08/27 PHP
PHP高级OOP技术演示
2009/08/27 PHP
关于js和php对url编码的处理方法
2014/03/04 PHP
PHP实现检测客户端是否使用代理服务器及其匿名级别
2015/01/07 PHP
PHP获取一年有几周以及每周开始日期和结束日期
2015/08/06 PHP
php实现的mysqldb读写分离操作类示例
2017/02/07 PHP
PHP中的函数声明与使用详解
2017/05/27 PHP
基于ThinkPHP5.0实现图片上传插件
2017/09/25 PHP
PHP 文件上传限制问题
2019/09/01 PHP
PHP实现创建一个RPC服务操作示例
2020/02/23 PHP
一次失败的jQuery优化尝试小结
2011/02/06 Javascript
js 中{},[]中括号,大括号使用详解
2011/05/12 Javascript
Fastest way to build an HTML string(拼装html字符串的最快方法)
2011/08/20 Javascript
JS 添加网页桌面快捷方式的代码详细整理
2012/12/27 Javascript
jQuery 全选/反选以及单击行改变背景色实例
2013/07/02 Javascript
js导入导出excel(实例代码)
2013/11/25 Javascript
js键盘事件的keyCode
2014/07/29 Javascript
更高效的使用JQuery 这里总结了8个小技巧
2016/04/13 Javascript
jQuery Validate 数组 全部验证问题
2017/01/12 Javascript
JS中mouseup事件丢失的原因与解决办法
2017/06/14 Javascript
JS使用正则表达式验证身份证号码
2017/06/23 Javascript
Grunt针对静态文件的压缩,版本控制打包的实例讲解
2017/09/29 Javascript
基于node简单实现RSA加解密的方法步骤
2019/03/21 Javascript
如何在vue项目中嵌入jsp页面的方法(2种)
2020/02/06 Javascript
使用Vue实现一个树组件的示例
2020/11/06 Javascript
nohup后台启动Python脚本,log不刷新的解决方法
2019/01/14 Python
DRF框架API版本管理实现方法解析
2020/08/21 Python
Html5移动端获奖无缝滚动动画实现示例
2018/06/25 HTML / CSS
20世纪40年代连衣裙和复古服装:The Seamstress Of Bloomsbury
2018/07/24 全球购物
利用promise及参数解构封装ajax请求的方法
2021/03/24 Javascript
遗体告别仪式主持词
2014/03/20 职场文书
领导干部群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
交通事故赔偿协议书怎么写
2014/10/04 职场文书
老龙头导游词
2015/02/11 职场文书
Python实现生活常识解答机器人
2021/06/28 Python
python神经网络Xception模型
2022/05/06 Python