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 相关文章推荐
html中select语句读取mysql表中内容
Oct 09 PHP
php桌面中心(二) 数据库写入
Mar 11 PHP
PHP数组内存耗用太多问题的解决方法
Apr 05 PHP
php将时间差转换为字符串提示
Sep 07 PHP
phpstrom使用xdebug配置方法
Dec 17 PHP
PHP面向对象精要总结
Nov 07 PHP
php查找指定目录下指定大小文件的方法
Nov 28 PHP
php中magic_quotes_gpc对unserialize的影响分析
Dec 16 PHP
php 的反射详解及示例代码
Aug 25 PHP
Linux下快速搭建php开发环境
Mar 13 PHP
php 中的closure用法详解
Jun 12 PHP
PHP结合Ffmpeg快速搭建流媒体服务的实践记录
Oct 31 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
第一个无线电台是由谁发明的
2021/03/01 无线电
PHP include_path设置技巧分享
2011/07/03 PHP
php对二维数组进行相关操作(排序、转换、去空白等)
2015/11/04 PHP
PHP自定义错误处理的方法分析
2018/12/19 PHP
PHP进阶学习之依赖注入与Ioc容器详解
2019/06/19 PHP
php 多个变量指向同一个引用($b = &amp;$a)用法分析
2019/11/13 PHP
动态加载js文件 document.createElement
2006/10/14 Javascript
XHTML-Strict 内允许出现的标签
2006/12/11 Javascript
JQuery操作表格(隔行着色,高亮显示,筛选数据)
2012/02/23 Javascript
基于jquery的鼠标拖动效果代码
2012/05/30 Javascript
JavaScript实现的GBK、UTF8字符串实际长度计算函数
2014/08/27 Javascript
原生JavaScript实现Ajax的方法
2016/04/07 Javascript
Node.js的Web模板引擎ejs的入门使用教程
2016/06/06 Javascript
jquery广告无缝轮播实例
2017/01/05 Javascript
基于JavaScript实现轮播图原理及示例
2020/04/10 Javascript
js 简易版滚动条实例(适用于移动端H5开发)
2017/06/26 Javascript
AngularJS学习笔记之表单验证功能实例详解
2017/07/06 Javascript
JavaScript canvas仿代码流瀑布
2020/02/10 Javascript
8个非常实用的Vue自定义指令
2020/12/15 Vue.js
[01:50]《我与DAC》之玩家:iG夺冠时的那面红旗
2018/03/29 DOTA
Python中多线程thread与threading的实现方法
2014/08/18 Python
python 把数据 json格式输出的实例代码
2016/10/31 Python
详解python中 os._exit() 和 sys.exit(), exit(0)和exit(1) 的用法和区别
2017/06/23 Python
Python中Threading用法详解
2017/12/27 Python
Django中数据库的数据关系:一对一,一对多,多对多
2018/10/21 Python
解决python xlrd无法读取excel文件的问题
2018/12/25 Python
Python Opencv轮廓常用操作代码实例解析
2020/09/01 Python
浅析数据存储的三种方式 cookie sessionstorage localstorage 的异同
2020/06/04 HTML / CSS
挪威太阳镜和眼镜网上商城:SmartBuyGlasses挪威
2016/08/20 全球购物
英国国家美术馆商店:National Gallery
2019/05/01 全球购物
皇家阿尔伯特瓷器美国官网:Royal Albert美国
2020/02/16 全球购物
庆六一文艺汇演活动方案
2014/08/26 职场文书
先进工作者申报材料
2014/12/23 职场文书
Python 使用dict实现switch的操作
2021/04/07 Python
Nginx反向代理至go-fastdfs案例讲解
2021/08/02 Servers
httpclient调用远程接口的方法
2022/08/14 Java/Android