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 魔术函数使用说明
May 14 PHP
比较全面的PHP数组的使用方法小结
Sep 23 PHP
PHP递归算法的详细示例分析
Feb 19 PHP
php比较两个绝对时间的大小
Jan 31 PHP
laravel 4安装及入门图文教程
Oct 29 PHP
支持中文、字母、数字的PHP验证码
May 04 PHP
PHP的serialize序列化数据以及JSON格式化数据分析
Oct 10 PHP
PHP对象克隆clone用法示例
Sep 28 PHP
PHP基于ICU扩展intl快速实现汉字转拼音及按拼音首字母分组排序的方法
May 03 PHP
PHP框架Laravel中实现supervisor执行异步进程的方法
Jun 07 PHP
PHP递归实现文件夹的复制、删除、查看大小操作示例
Aug 11 PHP
Laravel 类和接口注入相关的代码
Oct 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
让Laravel API永远返回JSON格式响应的方法示例
2018/09/05 PHP
一个基于jquery的图片切换效果
2010/07/06 Javascript
25个非常棒的jQuery滑块插件和教程小结
2011/09/02 Javascript
一个分享按钮的插件使用介绍(可扩展,内附开发制作流程)
2011/09/19 Javascript
js给dropdownlist添加选项的小例子
2013/03/04 Javascript
javascript实现div浮动在网页最顶上并带关闭按钮效果实例
2013/08/13 Javascript
图片动画横条广告带上下滚动的JS代码
2013/10/25 Javascript
java与javascript之间json格式数据互转介绍
2013/10/29 Javascript
js中文逗号转英文实现
2014/02/11 Javascript
nodejs中转换URL字符串与查询字符串详解
2014/11/26 NodeJs
兼容主流浏览器的JS复制内容到剪贴板
2014/12/12 Javascript
js实现简单选项卡与自动切换效果的方法
2015/04/10 Javascript
jQuery插件datepicker 日期连续选择
2015/06/12 Javascript
jQuery增加自定义函数的方法
2015/07/18 Javascript
jQuery+PHP+MySQL二级联动下拉菜单实例讲解
2015/10/27 Javascript
JavaScript中使用webuploader实现上传视频功能(demo)
2017/04/10 Javascript
JavaScript 中的12种循环遍历方法【总结】
2018/05/31 Javascript
解决echarts的多个折现数据出现坐标和值对不上的问题
2018/12/28 Javascript
Vue实现将数据库中带html标签的内容输出(原始HTML(Raw HTML))
2019/10/28 Javascript
Vue中Table组件行内右键菜单实现方法(基于 vue + AntDesign)
2019/11/21 Javascript
如何使用gpu.js改善JavaScript的性能
2020/12/01 Javascript
py2exe 编译ico图标的代码
2013/03/08 Python
Python不规范的日期字符串处理类
2014/06/10 Python
使用PDB模式调试Python程序介绍
2015/04/05 Python
Python实现字符串格式化的方法小结
2017/02/20 Python
Django的HttpRequest和HttpResponse对象详解
2018/01/26 Python
python实现zabbix发送短信脚本
2018/09/17 Python
神经网络相关之基础概念的讲解
2018/12/29 Python
python GUI库图形界面开发之PyQt5切换按钮控件QPushButton详细使用方法与实例
2020/02/28 Python
基于python爬取链家二手房信息代码示例
2020/10/21 Python
美国玛丽莎收藏奢华时尚商店:Marissa Collections
2016/11/21 全球购物
捷克钓鱼用品网上商店:Parys.cz
2018/06/15 全球购物
煤矿安全保证书
2015/02/27 职场文书
Python django中如何使用restful框架
2021/06/23 Python
教你修复 Win11应用商店加载空白问题
2021/12/06 数码科技
Python中Matplotlib的点、线形状、颜色以及绘制散点图
2022/04/07 Python