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注入实例
Oct 09 PHP
PHP缓存技术的使用说明
Aug 06 PHP
php图片加中文水印实现代码分享
Oct 31 PHP
php使用异或实现的加密解密实例
Sep 04 PHP
基于laravel制作APP接口(API)
Mar 15 PHP
详解PHP归并排序的实现
Oct 18 PHP
php实现背景图上添加圆形logo图标的方法
Nov 17 PHP
php in_array() 检查数组中是否存在某个值详解
Nov 23 PHP
php使用str_replace替换多维数组的实现方法分析
Jun 15 PHP
PHP排序算法之简单选择排序(Simple Selection Sort)实例分析
Apr 20 PHP
laravel框架语言包拓展实现方法分析
Nov 22 PHP
基于thinkphp5框架实现微信小程序支付 退款 订单查询 退款查询操作
Aug 17 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
ThinkPHP模板比较标签用法详解
2014/06/30 PHP
php使用cookie保存登录用户名的方法
2015/01/26 PHP
php判断用户是否手机访问代码
2015/06/08 PHP
将PHP程序中返回的JSON格式数据用gzip压缩输出的方法
2016/03/03 PHP
示例详解Laravel重置密码代码重构
2016/08/10 PHP
Symfony2创建基于域名的路由相关示例
2016/11/14 PHP
一个对于js this关键字的问题
2007/01/09 Javascript
让innerText在firefox火狐和IE浏览器都能用的写法
2011/05/14 Javascript
js实现点击注册按钮开始读秒倒计时的小例子
2013/05/11 Javascript
利用JQuery制作符合Web标准的QQ弹出消息
2014/01/14 Javascript
node.js中的path.isAbsolute方法使用说明
2014/12/08 Javascript
jquery实现鼠标滑过小图时显示大图的方法
2015/01/14 Javascript
javaScript基础语法介绍
2015/02/28 Javascript
浅谈JavaScript的全局变量与局部变量
2016/06/10 Javascript
vue2.0构建单页应用最佳实战
2017/04/01 Javascript
javascript按钮禁用和启用的效果实例代码
2017/10/29 Javascript
使用axios实现上传图片进度条功能
2017/12/21 Javascript
react脚手架如何配置less和ant按需加载的方法步骤
2018/11/28 Javascript
[00:27]DOTA2战队VP、Secret贺新春
2018/02/11 DOTA
[40:03]RNG vs VG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
python发送伪造的arp请求
2014/01/09 Python
python实现在pickling的时候压缩的方法
2014/09/25 Python
python daemon守护进程实现
2016/08/27 Python
Python实现字典去除重复的方法示例
2017/07/31 Python
django-crontab实现服务端的定时任务的示例代码
2020/02/17 Python
Python数据可视化常用4大绘图库原理详解
2020/10/23 Python
Brydge英国:适用于Apple iPad和Microsoft Surface Pro的蓝牙键盘
2019/05/16 全球购物
如何进行Linux分区优化
2013/02/12 面试题
自我评价中英文语句
2013/11/30 职场文书
毕业生的求职信范文分享
2013/12/04 职场文书
物流仓储计划书
2014/01/10 职场文书
网络工程师自荐书范文
2014/04/01 职场文书
公司股权转让协议书
2014/04/12 职场文书
三严三实心得体会范文
2014/10/13 职场文书
2014年药房工作总结
2014/11/22 职场文书
教师见习总结范文
2015/06/23 职场文书