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加速 eAccelerator配置和使用指南
Jun 05 PHP
php 来访国内外IP判断代码并实现页面跳转
Dec 18 PHP
php获取远程图片的两种 CURL方式和sockets方式获取远程图片
Nov 07 PHP
PHP使用正则表达式清除超链接文本
Nov 12 PHP
PHP实现PDO的mysql数据库操作类
Dec 12 PHP
使用Huagepage和PGO来提升PHP7的执行性能
Nov 30 PHP
Zend Framework动作助手Redirector用法实例详解
Mar 05 PHP
php版微信公众平台接口开发之智能回复开发教程
Sep 22 PHP
关于PHP内置的字符串处理函数详解
Feb 04 PHP
关于 Laravel Redis 多个进程同时取队列问题详解
Dec 25 PHP
PHP的mysqli_select_db()函数讲解
Jan 23 PHP
PHP创建文件及写入数据(覆盖写入,追加写入)的方法详解
Feb 15 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
实时抓取YAHOO股票报价的代码
2006/10/09 PHP
判断php数组是否为索引数组的实现方法
2013/06/13 PHP
php简单实现多维数组排序的方法
2016/09/30 PHP
Aster vs Newbee BO3 第三场2.18
2021/03/10 DOTA
有趣的JavaScript数组长度问题代码说明
2011/01/20 Javascript
JS正则中的RegExp对象对象
2012/11/07 Javascript
在Linux上用forever实现Node.js项目自启动
2014/07/09 Javascript
javascript检测两个数组是否相似
2015/05/19 Javascript
如何解决ligerUI布局时Center中的Tab高度大小
2015/11/24 Javascript
jQuery基于muipicker实现仿ios时间选择
2016/02/22 Javascript
js精准的倒计时函数分享
2016/06/29 Javascript
NodeJs读取JSON文件格式化时的注意事项
2016/09/25 NodeJs
纯原生js实现贪吃蛇游戏
2020/04/16 Javascript
JavaScript门道之标准库
2018/05/26 Javascript
JS的函数调用栈stack size的计算方法
2018/06/24 Javascript
浅谈在react中如何实现扫码枪输入
2018/07/04 Javascript
swiper.js插件实现pc端文本上下滑动功能示例
2018/12/03 Javascript
使用异步controller与jQuery实现卷帘式分页
2019/06/18 jQuery
jQuery实现可编辑的表格
2019/12/11 jQuery
[39:19]完美世界DOTA2联赛PWL S2 SZ vs LBZS 第二场 11.26
2020/11/30 DOTA
Python的shutil模块中文件的复制操作函数详解
2016/07/05 Python
人机交互程序 python实现人机对话
2017/11/14 Python
Python中numpy模块常见用法demo实例小结
2019/03/16 Python
Python内置函数locals和globals对比
2020/04/28 Python
django form和field具体方法和属性说明
2020/07/09 Python
浅谈移动端网页图片预加载方案
2018/11/05 HTML / CSS
香港草莓网土耳其网站:Strawberrynet TR
2017/03/02 全球购物
法国在线宠物店:zooplus.fr
2018/02/23 全球购物
汽车销售求职自荐信
2013/10/01 职场文书
优秀演讲稿范文
2013/12/29 职场文书
财务部副经理岗位职责
2014/03/14 职场文书
优秀学生干部个人事迹材料
2014/06/02 职场文书
主要负责人任命书
2014/06/06 职场文书
股指期货心得体会
2014/09/10 职场文书
教师年度考核自我评鉴
2015/08/11 职场文书
python 经纬度求两点距离、三点面积操作
2021/06/03 Python