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 MVC模式在网站架构中的实现分析
Mar 04 PHP
PHP 开发环境配置(Zend Studio)
Apr 28 PHP
浅析PHP程序防止ddos,dns,集群服务器攻击的解决办法
Jun 18 PHP
深入PHP许愿墙模块功能分析
Jun 25 PHP
php中如何同时使用session和cookie来保存用户登录信息
Jul 05 PHP
11个PHPer必须要了解的编程规范
Sep 22 PHP
PHP网站开发中常用的8个小技巧
Feb 13 PHP
汇总PHPmailer群发Gmail的常见问题
Feb 24 PHP
PHP自定义函数获取汉字首字母的方法
Dec 01 PHP
PHP文件与目录操作示例
Dec 24 PHP
laravel中的一些简单实用功能
Nov 03 PHP
tp5 sum某个字段相加得到总数的例子
Oct 18 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
中国的第一台收音机
2021/03/01 无线电
PHP从FLV文件获取视频预览图的方法
2015/03/12 PHP
php把时间戳转换成多少时间之前函数的实例
2016/11/16 PHP
thinkPHP模板引擎用法示例
2016/12/08 PHP
php使用curl获取header检测开启GZip压缩的方法
2018/08/15 PHP
PHP发送邮件确认验证注册功能示例【修改别人邮件类】
2019/11/09 PHP
Yii框架模拟组件调用注入示例
2019/11/11 PHP
让div层随鼠标移动的实现代码 ie ff
2009/12/18 Javascript
js实时获取并显示当前时间的方法
2015/07/31 Javascript
jfinal与bootstrap的登录跳转实战演习
2015/09/22 Javascript
理解javascript中try...catch...finally
2015/12/25 Javascript
Spring Boot/VUE中路由传递参数的实现代码
2018/03/02 Javascript
浅谈Vue路由快照实现思路及其问题
2018/06/07 Javascript
微信小程序时间戳转日期的详解
2019/04/30 Javascript
对layui中table组件工具栏的使用详解
2019/09/19 Javascript
JavaScript鼠标拖拽事件详解
2020/04/03 Javascript
javascript前端和后台进行数据交互方法示例
2020/08/07 Javascript
Vue如何实现验证码输入交互
2020/12/07 Vue.js
[00:06]Yes,it worked!小卡尔成功穿越时空加入战场!
2019/07/20 DOTA
Python subprocess模块学习总结
2014/03/13 Python
基于MTCNN/TensorFlow实现人脸检测
2018/05/24 Python
Python爬虫使用脚本登录Github并查看信息
2018/07/16 Python
Python3实现获取图片文字里中文的方法分析
2018/12/13 Python
python Pexpect 实现输密码 scp 拷贝的方法
2019/01/03 Python
使用python3构建文件传输的方法
2019/02/13 Python
使用Python控制摄像头拍照并发邮件
2019/04/23 Python
python opencv摄像头的简单应用
2019/06/06 Python
基于Django统计博客文章阅读量
2019/10/29 Python
Java面试题及答案
2012/09/08 面试题
实用求职信范文分享
2013/12/25 职场文书
医科大学毕业生自荐信
2014/02/03 职场文书
幼儿园教师教学反思
2014/02/06 职场文书
中西医专业毕业生职业规划书
2014/02/24 职场文书
促销活动方案模板
2014/02/24 职场文书
演讲稿格式范文
2014/05/19 职场文书
一篇文章看懂MySQL主从复制与读写分离
2021/11/07 MySQL