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 相关文章推荐
ajax缓存问题解决途径
Dec 06 PHP
PHP中动态显示签名和ip原理
Mar 28 PHP
PHP 多维数组的排序问题 根据二维数组中某个项排序
Nov 09 PHP
解析Linux下Varnish缓存的配置优化
Jun 20 PHP
浅析php数据类型转换
Jan 09 PHP
zf框架的zend_cache缓存使用方法(zend框架)
Mar 14 PHP
php读取富文本的时p标签会出现红线是怎么回事
May 13 PHP
ThinkPHP模板判断输出Empty标签用法详解
Jun 30 PHP
PHP实现微信申请退款功能
Oct 01 PHP
PHP使用PDO操作sqlite数据库应用案例
Mar 07 PHP
laravel 解决crontab不执行的问题
Oct 22 PHP
Laravel 实现添加多语言提示信息
Oct 25 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调用mysql存储过程
2007/02/14 PHP
如何运行/调试你的PHP代码
2020/10/23 PHP
javascript据option的value值快速设定初始的selected选项
2007/08/13 Javascript
ext 代码生成器
2009/08/07 Javascript
浏览器窗口加载和大小改变事件示例
2014/02/27 Javascript
js实现模拟计算器退格键删除文字效果的方法
2015/05/07 Javascript
JavaScript中的函数(二)
2015/12/23 Javascript
使用HTML5+Boostrap打造简单的音乐播放器
2016/08/05 Javascript
JS禁止查看网页源代码的实现方法
2016/10/12 Javascript
基于模板引擎Jade的应用(详解)
2017/12/12 Javascript
jQuery HTML获取内容和属性操作实例分析
2020/05/20 jQuery
在Vue 中实现循环渲染多个相同echarts图表
2020/07/20 Javascript
在Uni中使用Vue的EventBus总线机制操作
2020/07/31 Javascript
Vue中nprogress页面加载进度条的方法实现
2020/11/13 Javascript
python求众数问题实例
2014/09/26 Python
python实现挑选出来100以内的质数
2015/03/24 Python
python 与GO中操作slice,list的方式实例代码
2017/03/20 Python
python OpenCV学习笔记之绘制直方图的方法
2018/02/08 Python
Python通过属性手段实现只允许调用一次的示例讲解
2018/04/21 Python
Python中turtle库的使用实例
2019/09/09 Python
关于Python 常用获取元素 Driver 总结
2019/11/24 Python
Python+PyQt5实现灭霸响指功能
2020/05/25 Python
波兰家居和花园家具专家:4Home
2019/05/26 全球购物
波兰家居饰品和厨房配件网上商店:Maleomi
2020/12/15 全球购物
大学毕业生的自我鉴定
2013/11/30 职场文书
工厂会计员职责
2014/02/06 职场文书
餐厅楼面主管岗位职责范本
2014/02/16 职场文书
《一株紫丁香》教学反思
2014/02/19 职场文书
小学生优秀评语大全
2014/04/22 职场文书
大学生党员批评与自我批评
2014/09/28 职场文书
科学发展观标语
2014/10/08 职场文书
家长评语怎么写
2014/12/30 职场文书
学雷锋日活动总结
2015/02/06 职场文书
2015年世界无烟日活动总结
2015/02/10 职场文书
vue+springboot实现登录验证码
2021/05/27 Vue.js
Win11开始菜单添加休眠选项
2022/04/19 数码科技