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数组的一些常见操作汇总
Jul 17 PHP
PHP常用技巧总结(附函数代码)
Feb 04 PHP
IIS6.0中配置php服务全过程解析
Aug 07 PHP
帝国CMS留言板回复后发送EMAIL通知客户
Jul 06 PHP
php删除数组中重复元素的方法
Dec 22 PHP
PHP实现搜索地理位置及计算两点地理位置间距离的实例
Jan 08 PHP
php实现图片上传、剪切功能
May 07 PHP
php单链表实现代码分享
Jul 04 PHP
php使用FFmpeg接口获取视频的播放时长、码率、缩略图以及创建时间
Nov 07 PHP
thinkPHP中_initialize方法实例分析
Dec 05 PHP
PHP unlink与rmdir删除目录及目录下所有文件实例代码
Feb 07 PHP
yii2.0框架实现上传excel文件后导入到数据库的方法示例
Apr 13 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抓取页面与代码解析 推荐
2010/07/23 PHP
PHP学习笔记之一
2011/01/17 PHP
php 无限级分类,超级简单的无限级分类,支持输出树状图
2014/06/29 PHP
PHP过滤黑名单关键字的方法
2014/12/01 PHP
YII Framework框架教程之国际化实现方法
2016/03/14 PHP
PHP使用Mysqli类库实现完美分页效果的方法
2016/04/07 PHP
thinkphp框架实现路由重定义简化url访问地址的方法分析
2020/04/04 PHP
11款新鲜的jQuery插件[附所有demo下载]
2011/01/24 Javascript
很好用的js日历算法详细代码
2013/03/07 Javascript
jquery parent和parents的区别分析
2013/10/02 Javascript
JQuery记住用户名和密码的具体实现
2014/04/04 Javascript
移除AngularJS下URL中的#字符的方法
2015/06/19 Javascript
跟我学习javascript的基本类型和引用类型
2015/11/16 Javascript
mvvm双向绑定机制的原理和实现代码(推荐)
2016/06/07 Javascript
关于Function中的bind()示例详解
2016/12/02 Javascript
angularjs实现下拉列表的选中事件示例
2017/03/03 Javascript
JS如何判断浏览器类型和详细区分IE各版本浏览器
2017/03/04 Javascript
vue增删改查的简单操作
2017/07/15 Javascript
基于es6三点运算符的使用方法(实例讲解)
2017/10/12 Javascript
修改UA在PC中访问只能在微信中打开的链接方法
2017/11/27 Javascript
详解Vue中使用Axios拦截器
2019/04/22 Javascript
[46:32]Fnatic vs OG 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python连接mysql调用存储过程示例
2014/03/05 Python
Python中matplotlib中文乱码解决办法
2017/05/12 Python
Python中Threading用法详解
2017/12/27 Python
python检索特定内容的文本文件实例
2018/06/05 Python
详解Python的爬虫框架 Scrapy
2020/08/03 Python
使用bandit对目标python代码进行安全函数扫描的案例分析
2021/01/27 Python
西安启天科技有限公司网络工程师面试题笔试题
2016/06/12 面试题
会计专业毕业生自荐信范文
2013/12/20 职场文书
奶茶专卖店创业计划书
2014/01/18 职场文书
调解员先进事迹材料
2014/02/07 职场文书
确保工程质量承诺书
2015/04/29 职场文书
学生会副主席竞选稿
2015/11/19 职场文书
WebRTC记录音视频流(web技术分享)
2022/02/24 Javascript
关于mysql中string和number的转换问题
2022/06/14 MySQL