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 相关文章推荐
Windows Apache2.2.11及Php5.2.9-1的安装与配置方法
Jun 08 PHP
php下使用SimpleXML 处理XML 文件
Feb 27 PHP
php的日期处理函数及uchome的function_coomon中日期处理函数的研究
Jan 12 PHP
第4章 数据处理-php数组的处理-郑阿奇
Jul 04 PHP
PHP代码保护--Zend Guard的使用详解
Jun 03 PHP
php另类上传图片的方法(PHP用Socket上传图片)
Oct 30 PHP
php定界符
Jun 19 PHP
smarty模板引擎从php中获取数据的方法
Jan 22 PHP
学习php设计模式 php实现享元模式(flyweight)
Dec 07 PHP
Laravel搭建后台登录系统步骤详解
Jul 26 PHP
PHP在线打包下载功能示例
Oct 15 PHP
php+js实现的无刷新下载文件功能示例
Aug 23 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文件操作的详解
2013/06/05 PHP
浅谈thinkphp的实例化模型
2015/01/04 PHP
PHP获取路径和目录的方法总结【必看篇】
2017/03/04 PHP
PHP常用header头定义代码示例汇总
2020/08/29 PHP
获取JavaScript用户自定义类的类名称的代码
2007/03/08 Javascript
基于jquery的blockui插件显示弹出层
2011/04/14 Javascript
javascript学习笔记(十九) 节点的操作实现代码
2012/06/20 Javascript
drag-and-drop实现图片浏览器预览
2015/08/06 Javascript
JavaScript判断表单中多选框checkbox选中个数的方法
2015/08/17 Javascript
浅谈javascript函数式编程
2015/09/06 Javascript
jQuery获取checkboxlist的value值的方法
2015/09/27 Javascript
基于javascript实现简单计算器功能
2016/01/03 Javascript
javascript实现抽奖程序的简单实例
2016/06/07 Javascript
JS仿百度自动下拉框模糊匹配提示
2016/07/25 Javascript
VueJS全面解析
2016/11/10 Javascript
Bootstrop实现多级下拉菜单功能
2016/11/24 Javascript
浅谈Javascript事件对象
2017/02/05 Javascript
微信小程序实现默认第一个选中变色效果
2018/07/17 Javascript
如何将HTML字符转换为DOM节点并动态添加到文档中详解
2018/08/19 Javascript
Vue实现商品分类菜单数量提示功能
2019/07/26 Javascript
Python解析最简单的验证码
2016/01/07 Python
Python编程中的文件读写及相关的文件对象方法讲解
2016/01/19 Python
Python运行报错UnicodeDecodeError的解决方法
2016/06/07 Python
Python清空文件并替换内容的实例
2018/10/22 Python
利用Pycharm断点调试Python程序的方法
2018/11/29 Python
解决python 文本过滤和清理问题
2019/08/28 Python
NumPy统计函数的实现方法
2020/01/21 Python
在Python中用GDAL实现矢量对栅格的切割实例
2020/03/11 Python
Python StringIO及BytesIO包使用方法解析
2020/06/15 Python
Melissa鞋英国官方网站:Nonnon
2019/05/01 全球购物
构造方法和其他方法的区别
2016/04/26 面试题
办公室内勤岗位职责范本
2013/12/09 职场文书
《囚绿记》教学反思
2014/03/01 职场文书
小学生倡议书范文
2014/05/13 职场文书
党员群众路线对照检查材料
2014/08/31 职场文书
PyTorch 如何检查模型梯度是否可导
2021/06/05 Python