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下批量挂马和批量清马代码
Feb 27 PHP
PHP session会话的安全性分析
Sep 08 PHP
PHP性能优化准备篇图解PEAR安装
Dec 05 PHP
PHP异常Parse error: syntax error, unexpected T_VAR错误解决方法
May 06 PHP
深入理解PHP中的global
Aug 19 PHP
ThinkPHP基本的增删查改操作实例教程
Aug 22 PHP
IIS下PHP的三种配置方式对比
Nov 20 PHP
php中动态调用函数的方法
Mar 16 PHP
PHP的Socket网络编程入门指引
Aug 11 PHP
PHP Web木马扫描器代码分享
Sep 06 PHP
PHP生成各种常见验证码和Ajax验证过程
Jan 10 PHP
php实现按天数、星期、月份查询的搜索框
May 02 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下利用header()函数设置浏览器缓存的代码
2010/09/01 PHP
php命令行使用方法和命令行参数说明
2014/04/08 PHP
ThinkPHP使用心得分享-上传类UploadFile的使用
2014/05/15 PHP
php导出生成word的方法
2015/12/25 PHP
Smarty模板引擎缓存机制详解
2016/05/23 PHP
基于php实现的验证码小程序
2016/12/13 PHP
php生成毫秒时间戳的实例讲解
2017/09/22 PHP
利用js获取服务器时间的两个简单方法
2010/01/08 Javascript
javascript实现上传图片并预览的效果实现代码
2011/04/11 Javascript
利用jQuery实现WordPress中@的ID悬浮显示评论内容
2015/12/11 Javascript
Fullpage.js固定导航栏-实现定位导航栏
2016/03/17 Javascript
微信小程序 页面传参实例详解
2016/11/16 Javascript
JavaScript 监控微信浏览器且自带返回按钮时间
2016/11/27 Javascript
js清除浏览器缓存的几种方法
2017/03/15 Javascript
微信小程序 引入es6 promise
2017/04/12 Javascript
vue内置指令详解
2018/04/03 Javascript
Vue 实现v-for循环的时候更改 class的样式名称
2020/07/17 Javascript
Nest.js 授权验证的方法示例
2021/02/22 Javascript
[06:10]6.81新信使新套装!给你一个炫酷的DOTA2
2014/05/06 DOTA
[56:00]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs TNC 第二场
2018/04/10 DOTA
Python使用QQ邮箱发送Email的方法实例
2017/02/09 Python
python 统计代码行数简单实例
2017/05/04 Python
Django网络框架之创建虚拟开发环境操作示例
2019/06/06 Python
OpenCV+Python--RGB转HSI的实现
2019/11/27 Python
使用opencv中匹配点对的坐标提取方式
2020/06/04 Python
html5版canvas自由拼图实例
2014/10/15 HTML / CSS
关于HTML5语义标签的实践(blog页面)
2016/07/12 HTML / CSS
美国知名女性服饰品牌:New York & Company
2017/03/23 全球购物
美赞臣新加坡官方旗舰店:Enfagrow新加坡
2019/05/15 全球购物
Footshop法国:购买运动鞋
2020/01/19 全球购物
兰蔻法国官方网站:Lancôme法国
2020/02/22 全球购物
怎样写好自我评价呢?
2014/02/16 职场文书
幼儿教师师德演讲稿
2014/05/06 职场文书
入党积极分子批评与自我批评思想汇报
2014/09/14 职场文书
社区青年志愿者活动总结
2015/05/06 职场文书
Python find()、rfind()方法及作用
2022/12/24 Python