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中强制下载文件的代码(解决了IE下中文文件名乱码问题)
May 09 PHP
探讨php define()函数及defined()函数使用详解
Jun 09 PHP
PHP URL路由类实例
Nov 12 PHP
destoon实现商铺管理主页设置增加新菜单的方法
Jun 26 PHP
IIS下PHP的三种配置方式对比
Nov 20 PHP
浅谈ThinkPHP的URL重写
Nov 25 PHP
DOM基础及php读取xml内容操作的方法
Jan 23 PHP
PHP接收App端发送文件流的方法
Sep 23 PHP
PHP页面输出搜索后跳转下一页的处理方法
Sep 30 PHP
php实现将HTML页面转换成word并且保存的方法
Oct 14 PHP
php 判断页面或图片是否经过gzip压缩的方法
Apr 05 PHP
PHP attributes()函数讲解
Feb 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 mysql_real_escape_string函数用法与实例教程
2013/09/30 PHP
PHP制作3D扇形统计图以及对图片进行缩放操作实例
2014/10/23 PHP
php从csv文件读取数据并输出到网页的方法
2015/03/14 PHP
php实现XSS安全过滤的方法
2015/07/29 PHP
Yii2创建控制器(createController)方法详解
2016/07/23 PHP
php发送http请求的常用方法分析
2016/11/08 PHP
PHP版微信小店接口开发实例
2016/11/12 PHP
PHP与Web页面的交互示例详解二
2020/08/04 PHP
防止xss和sql注入:JS特殊字符过滤正则
2013/04/18 Javascript
jquery插件jquery倒计时插件分享
2013/12/27 Javascript
JavaScript中匿名函数的用法及优缺点详解
2016/06/01 Javascript
Jquery对新插入的节点 绑定Click事件失效的解决方法
2016/06/02 Javascript
AngularJS基础 ng-cloak 指令简单示例
2016/08/01 Javascript
javascript 闭包详解及简单实例应用
2016/12/31 Javascript
详解node中创建服务进程
2017/05/09 Javascript
jQuery实现base64前台加密解密功能详解
2017/08/29 jQuery
JS设置自定义快捷键并实现图片上下左右移动
2019/10/17 Javascript
解决vue scoped html样式无效的问题
2020/10/24 Javascript
Python连接mssql数据库编码问题解决方法
2015/01/01 Python
Python Web框架Flask下网站开发入门实例
2015/02/08 Python
修复 Django migration 时遇到的问题解决
2018/06/14 Python
python实现括号匹配的思路详解
2018/08/23 Python
python使用正则表达式来获取文件名的前缀方法
2018/10/21 Python
详解python使用pip安装第三方库(工具包)速度慢、超时、失败的解决方案
2018/12/02 Python
Python如何实现转换URL详解
2019/07/02 Python
python多线程实现TCP服务端
2019/09/03 Python
如何用H5实现一个触屏版的轮播器的实例
2017/01/09 HTML / CSS
护士长竞聘书
2014/03/31 职场文书
《水乡歌》教学反思
2014/04/24 职场文书
中学生演讲稿
2014/04/26 职场文书
学生会感恩节活动方案
2014/10/11 职场文书
工作疏忽检讨书500字
2014/10/26 职场文书
2015年母亲节活动总结
2015/02/10 职场文书
公司董事任命书
2015/09/21 职场文书
vue项目支付功能代码详解
2022/02/18 Vue.js
九大龙王魂骨,山龙王留下躯干骨,榜首死的最憋屈(被捏碎)
2022/03/18 国漫