PHP中执行MYSQL事务解决数据写入不完整等情况


Posted in PHP onJanuary 07, 2014

近来稍有时间研究了下MYSQL中的事务操作,在很多场合下很是适用,譬如在注册的时候需要初始化很多张关联表的时候,问答回复的时候需要至少同时操作两张表,这些都会在某些时候只能成功更新一张表,而另外的SQL语句出现错误,正常的操作会导致初始化了一张表 ,其他的都木有能初始化,这个时候就会导致用户表里的用户信息已经执行插入,导致提示注册失败,但是用户已经注册了部分信息,这个时候需要程序员去数据库删除相应的数据是一个比较不好的事情。

因此这边考虑使用事务,事务可以进行模拟SQL操作,当所有的SQL都操作成功的时候才进行SQL操作,只要有一个操作失败就回滚当前事务的所有SQL操作,避免出现上面描述中出现的数据写入不完整等情况。

下面是鄙人写的一小段代码,欢迎大家参考和提出意见:

/** 
* @todo 多条sql的事务处理 
* @param $sqls array 
* @return boole true/false 
*/ 
public function doArraySqlActionsTran($password,$sqls){ 
$db = $this -> doSqlLink($password);//打开数据库链接 
$db -> autocommit(FALSE);//设置为不自动提交,因为MYSQL默认立即执行 
//获取SQL执行结果数组 
for ($i=0;$i<count($sqls);$i++){ 
$result[$i] = $db -> query($sqls[$i]); 
} 
//解析SQL执行结果数组 
for ($j=0;$j<count($result);$j++){ 
if ($result[$j]==FALSE){ 
$result[$j]='false'; 
}else{ 
$result[$j]='true'; 
} 
} 
//查找SQL结果数组中是否存在false结果集 
if (in_array('false',$result)){ 
$sqlResult=FALSE; 
}else{ 
$sqlResult==TRUE; 
} 
//根据结果集进行数据库回滚或者执行操作 
if ($sqlResult==FALSE){ 
$db -> rollback();//判断当执行失败时回滚 
$return=FALSE;// 正式环境中使用 
//$return='ROOLBACK';//test 标记使用 
}else{ 
$db -> commit();//执行事务s 
$return=TRUE;// 正式环境中使用 
//$return='COMMIT';//test 标记使用 
} 
$db->autocommit(true); //设置为非自动提交——事务处理 
$db->close();//关闭连接 
return $return; 
}

到此事务执行批量SQL操作基本完成,谢谢大家!
PHP 相关文章推荐
php简单封装了一些常用JS操作
Feb 25 PHP
在PHP中读取和写入WORD文档的代码
Apr 09 PHP
一个php导出oracle库的php代码
Apr 20 PHP
PHP学习之数组的定义和填充
Apr 17 PHP
session在php5.3中的变化 session_is_registered() is deprecated in
Nov 12 PHP
codeigniter集成ucenter1.6双向通信的解决办法
Jun 12 PHP
php出现web系统多域名登录失败的解决方法
Sep 30 PHP
PHP常用设计模式之委托设计模式
Feb 13 PHP
PHP使用FFmpeg获取视频播放总时长与码率等信息
Sep 13 PHP
PHP用mysql_insert_id()函数获得刚插入数据或当前发布文章的ID
Nov 25 PHP
php和vue配合使用技巧和方法
May 09 PHP
laravel实现上传图片,并且制作缩略图,按照日期存放的代码
Oct 16 PHP
PHP中实现生成静态文件的方法缓解服务器压力
Jan 07 #PHP
PHP中替换键名的简易方法示例详解
Jan 07 #PHP
php时区转换转换函数
Jan 07 #PHP
php加密解密实用类分享
Jan 07 #PHP
淘宝ip地址查询类分享(利用淘宝ip库)
Jan 07 #PHP
PHP中如何实现常用邮箱的基本判断
Jan 07 #PHP
PHP实现变色验证码实例
Jan 06 #PHP
You might like
PHP 增加了对 .ZIP 文件的读取功能
2006/10/09 PHP
dede全站URL静态化改造[070414更正]
2007/04/17 PHP
分页详解 从此分页无忧(PHP+mysql)
2007/11/23 PHP
基于wordpress主题制作的具体实现步骤
2013/05/10 PHP
JavaScript关于select的相关操作说明
2010/01/13 Javascript
js 实现日期灵活格式化的小例子
2013/07/14 Javascript
javascript中RegExp保留小数点后几位数的方法分享
2013/08/13 Javascript
eclipse如何忽略js文件报错(附图)
2013/10/30 Javascript
JS:window.onload的使用介绍
2013/11/13 Javascript
jQuery实现鼠标经过弹出提示信息的地图热点效果
2015/08/07 Javascript
Vue.js组件tree实现无限级树形菜单
2016/12/02 Javascript
如何解决hover在ie6中的兼容性问题
2016/12/15 Javascript
深入nodejs中流(stream)的理解
2017/03/27 NodeJs
ES6学习笔记之Set和Map数据结构详解
2017/04/07 Javascript
JS canvas绘制五子棋的棋盘
2020/05/28 Javascript
layui 富文本赋值,取值,取纯文本值的实例
2019/09/18 Javascript
javascript+css实现进度条效果
2020/03/25 Javascript
vue实现多个echarts根据屏幕大小变化而变化实例
2020/07/19 Javascript
原生js实现九宫格拖拽换位
2021/01/26 Javascript
python计算圆周长、面积、球体体积并画出圆
2014/04/08 Python
使用Python编写Linux系统守护进程实例
2015/02/03 Python
Python基于scrapy采集数据时使用代理服务器的方法
2015/04/16 Python
Tensorflow实现神经网络拟合线性回归
2019/07/19 Python
Python 切分数组实例解析
2019/11/07 Python
如何使用PyCharm引入需要使用的包的方法
2020/09/22 Python
纯CSS3实现图片无间断轮播效果
2016/08/25 HTML / CSS
C#实现启动一个进程
2016/10/01 面试题
机械化及自动化毕业生的自我评价分享
2013/11/06 职场文书
幼儿园中班教师寄语
2014/04/03 职场文书
党的群众路线教育实践活动对照检查材料(教师)
2014/09/24 职场文书
租车协议书
2015/01/27 职场文书
广告业务员岗位职责
2015/02/13 职场文书
浅谈如何提高PHP代码的质量
2021/05/28 PHP
详解overflow:hidden的作用(溢出隐藏、清除浮动、解决外边距塌陷)
2021/07/01 HTML / CSS
python opencv将多个图放在一个窗口的实例详解
2022/02/28 Python
MySQL聚簇索引和非聚簇索引的区别详情
2022/06/14 MySQL