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 相关文章推荐
杏林同学录(二)
Oct 09 PHP
PHP 文件缓存的性能测试
Apr 25 PHP
PHP CURL CURLOPT参数说明(curl_setopt)
Sep 30 PHP
适合PHP初学者阅读的4本经典书籍
Sep 23 PHP
php微信公众号开发(4)php实现自定义关键字回复
Dec 15 PHP
PHP仿tp实现mvc框架基本设计思路与实现方法分析
May 23 PHP
php设计模式之策略模式应用案例详解
Jun 17 PHP
laravel5表单唯一验证的实例代码
Sep 30 PHP
使用PHP+Redis实现延迟任务,实现自动取消订单功能
Nov 21 PHP
tp5.1 框架查询表达式用法详解
May 25 PHP
PHP实现限制域名访问的实现代码(本地验证)
Sep 13 PHP
windows系统php环境安装swoole具体步骤
Mar 04 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
第十五节--Zend引擎的发展
2006/11/16 PHP
PHP开启gzip页面压缩实例代码
2010/03/11 PHP
8个出色的WordPress SEO插件收集
2011/02/26 PHP
PHP基础知识回顾
2012/08/16 PHP
php中explode与split的区别介绍
2012/10/03 PHP
WordPress的主题编写中获取头部模板和底部模板
2015/12/28 PHP
PHP中in_array的隐式转换的解决方法
2018/03/06 PHP
PHP7 mongoDB扩展使用的方法分享
2019/05/02 PHP
静态的动态续篇之来点XML
2006/08/15 Javascript
js constructor的实际作用分析
2011/11/15 Javascript
通过复制Table生成word和excel的javascript代码
2014/01/20 Javascript
jquery无法设置checkbox选中即没有变成选中状态
2014/03/27 Javascript
一个非常全面的javascript URL解析函数和分段URL解析方法
2014/04/12 Javascript
iframe如何动态创建及释放其所占内存
2014/09/03 Javascript
js实现最短的XML格式化工具实例
2015/03/12 Javascript
盘点javascript 正则表达式中 中括号的【坑】
2016/03/16 Javascript
node.js连接mongoDB数据库 快速搭建自己的web服务
2016/04/17 Javascript
JS自定义混合Mixin函数示例
2016/11/26 Javascript
利用node.js实现自动生成前端项目组件的方法详解
2017/07/12 Javascript
超出JavaScript安全整数限制的数字计算BigInt详解
2018/06/24 Javascript
微信小程序实现收货地址左滑删除
2020/11/18 Javascript
echarts 使用formatter 修改鼠标悬浮事件信息操作
2020/07/20 Javascript
Python格式化css文件的方法
2015/03/10 Python
Python Tkinter GUI编程入门介绍
2015/03/10 Python
python3+PyQt5 数据库编程--增删改实例
2019/06/17 Python
django 单表操作实例详解
2019/07/30 Python
TensorFlow:将ckpt文件固化成pb文件教程
2020/02/11 Python
python dir函数快速掌握用法技巧
2020/12/09 Python
纯CSS3实现图片无间断轮播效果
2016/08/25 HTML / CSS
澳大利亚二手奢侈品网站:Modsie
2019/09/23 全球购物
SheIn沙特阿拉伯:女装在线
2020/03/23 全球购物
智能室内花园:Click & Grow
2021/01/29 全球购物
工程师自我评价怎么写
2013/09/19 职场文书
护理专业毕业生自荐信范文
2014/01/05 职场文书
工厂采购员岗位职责
2015/04/07 职场文书
入党转正申请自我鉴定
2019/06/25 职场文书