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
apache rewrite_module模块使用教程
Jan 10 PHP
使用HMAC-SHA1签名方法详解
Jun 26 PHP
PHP 获取远程文件大小的3种解决方法
Jul 11 PHP
php在线解压ZIP文件的方法
Dec 30 PHP
通过php删除xml文档内容的方法
Jan 23 PHP
SESSION存放在数据库用法实例
Aug 08 PHP
PHP中如何使用session实现保存用户登录信息
Oct 20 PHP
解决PHP程序运行时:Fatal error: Maximum execution time of 30 seconds exceeded in的错误提示
Nov 25 PHP
浅谈PHPANALYSIS提取关键字
Mar 08 PHP
Laravel5.0+框架邮件发送功能实现方法图文与实例详解
Apr 23 PHP
Laravel框架实现多数据库连接操作详解
Jul 12 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 auth_http类库进行身份效验
2009/03/19 PHP
PHP中spl_autoload_register()函数用法实例详解
2016/07/18 PHP
JavaScript入门教程(9) Document文档对象
2009/01/31 Javascript
PHP+jQuery实现随意拖动层并即时保存拖动位置
2015/04/30 Javascript
轻松实现javascript数据双向绑定
2015/11/11 Javascript
node.js入门实例helloworld详解
2015/12/23 Javascript
基于Jquery插件Uploadify实现实时显示进度条上传图片
2020/03/26 Javascript
js+css3实现旋转效果
2017/01/20 Javascript
浅谈原生JS实现jQuery的animate()动画示例
2017/03/08 Javascript
es6+angular1.X+webpack 实现按路由功能打包项目的示例
2017/08/16 Javascript
Bootstrap-table使用footerFormatter做统计列功能
2018/09/07 Javascript
浅析微信扫码登录原理(小结)
2018/10/29 Javascript
用node开发并发布一个cli工具的方法步骤
2019/01/03 Javascript
vue实现todolist功能、todolist组件拆分及todolist的删除功能
2019/04/11 Javascript
浅谈Vue的响应式原理
2019/05/30 Javascript
JS 数组和对象的深拷贝操作示例
2020/06/06 Javascript
跟老齐学Python之有容乃大的list(2)
2014/09/15 Python
Python中运行并行任务技巧
2015/02/26 Python
Python request设置HTTPS代理代码解析
2018/02/12 Python
python实现NB-IoT模块远程控制
2018/06/20 Python
用Python shell简化开发
2018/08/08 Python
解决vscode python print 输出窗口中文乱码的问题
2018/12/03 Python
python简单实现AES加密和解密
2019/03/28 Python
Python元组 tuple的概念与基本操作详解【定义、创建、访问、计数、推导式等】
2019/10/30 Python
Python bisect模块原理及常见实例
2020/06/17 Python
使用CSS3 制作一个material-design 风格登录界面实例
2016/12/12 HTML / CSS
国际书籍零售商:Wordery
2017/11/01 全球购物
Champion澳大利亚官网:美国冠军运动服装
2018/05/07 全球购物
建筑自我鉴定
2013/10/19 职场文书
本科生职业生涯规划书范文
2014/01/21 职场文书
教师现实表现材料
2014/02/14 职场文书
总经理助理岗位职责范本
2014/07/20 职场文书
讲文明知礼仪演讲稿
2014/09/13 职场文书
2014年国庆晚会主持词
2014/09/19 职场文书
民主生活会汇报材料
2014/12/15 职场文书
Python数据可视化之绘制柱状图和条形图
2021/05/25 Python