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学习笔记 面向对象的构造与析构方法
Jun 13 PHP
apache和PHP如何整合在一起
Oct 12 PHP
浅析Yii2缓存的使用
May 10 PHP
Yii框架结合sphinx,Ajax实现搜索分页功能示例
Oct 18 PHP
PHP中的use关键字及文件的加载详解
Nov 28 PHP
php判断str字符串是否是xml格式数据的方法示例
Jul 26 PHP
浅谈Laravel核心解读之Console内核
Dec 02 PHP
Laravel框架基于ajax和layer.js实现无刷新删除功能示例
Jan 17 PHP
PHP PDOStatement::fetchAll讲解
Jan 31 PHP
Laravel 框架返回状态拦截代码
Oct 18 PHP
Laravel框架下载,安装及路由操作图文详解
Dec 04 PHP
PHP sdk文档处理常用代码示例解析
Dec 09 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
腾讯QQ微博API接口获取微博内容
2013/10/30 PHP
php文件缓存类用法实例分析
2015/04/22 PHP
PHP实现深度优先搜索算法(DFS,Depth First Search)详解
2017/09/16 PHP
jQuery当鼠标悬停时放大图片的效果实例
2013/07/03 Javascript
jQuery中delegate与on的用法与区别示例介绍
2013/12/20 Javascript
简介alert()与console.log()的不同
2015/08/26 Javascript
javascript实现C语言经典程序题
2015/11/29 Javascript
基于Node.js的强大爬虫 能直接发布抓取的文章哦
2016/01/10 Javascript
jQuery+php实时获取及响应文本框输入内容的方法
2016/05/24 Javascript
深入理解JavaScript内置函数
2016/06/03 Javascript
用NodeJS实现批量查询地理位置的经纬度接口
2016/08/16 NodeJs
xtemplate node.js 的使用方法实例解析
2016/08/22 Javascript
JS使用正则实现去掉字符串左右空格的方法
2016/12/27 Javascript
微信小程序实战之自定义抽屉菜单(7)
2017/04/18 Javascript
详解微信小程序input标签正则初体验
2018/08/18 Javascript
angularJS自定义directive之带参方法传递详解
2018/10/09 Javascript
微信小程序 简易计算器实现代码实例
2019/09/02 Javascript
[00:52]DOTA2齐天大圣预告片
2016/08/13 DOTA
[52:02]完美世界DOTA2联赛PWL S2 FTD.C vs SZ 第一场 11.27
2020/11/30 DOTA
Python中字典(dict)和列表(list)的排序方法实例
2014/06/16 Python
Python中列表的一些基本操作知识汇总
2015/05/20 Python
Python实现模拟时钟代码推荐
2015/11/08 Python
python 多线程重启方法
2019/02/18 Python
Python实现Linux监控的方法
2019/05/16 Python
python实现文件批量编码转换及注意事项
2019/10/14 Python
浅谈PyQt5中异步刷新UI和Python多线程总结
2019/12/13 Python
利用Python实现Excel的文件间的数据匹配功能
2020/06/16 Python
python 实现Requests发送带cookies的请求
2021/02/08 Python
使用CSS3的font-face字体嵌入样式的方法讲解
2016/05/13 HTML / CSS
JD Sports芬兰:英国领先的运动鞋和运动服饰零售商
2018/11/16 全球购物
Booking.com德国:预订最好的酒店和住宿
2020/02/16 全球购物
C,C++的几个面试题小集
2013/07/13 面试题
大学本科毕业生的自我鉴定范文
2013/11/19 职场文书
商场收银员岗位职责
2015/04/07 职场文书
行政处罚听证告知书
2015/07/01 职场文书
python中redis包操作数据库的教程
2022/04/19 Python