PHP实现更新中间关联表数据的两种方法


Posted in PHP onSeptember 01, 2014

本文以示例形式展示了PHP实现更新中间关联表数据的两种方法。分享给大家供大家参考之用。具体方法如下:

首先,中间关联表:这里的中间表只存表1的主键和表2的主键,即多对多的形式。
执行数据添加和删除为框架内部方法,不属于思路部分。

方法一:先全部删除旧数据,后添加新数据

$res = $this->classes->classEdit($id, $data);//修改主表数据
if($res)
{
//先删除关联表数据
$bool = $this->lesson_classes->lessonClassesDel($id);
if($bool)
{
//循环组装条件,添加数据
foreach($lesson_ids as $val)
{
$arr = array('class_id'=>$id, 'lesson_id'=>$val);//数据
$res = $this->lesson_classes->lessonClassesAdd($arr);  //执行添加
}
}
$this->show_tips('操作成功!');
}
else
{
$this->show_tips('操作失败!');
}

使用该方法弊端:大批量删除数据这块儿不安全,存在一定程度的安全隐患。

方法二:只添加需要的,只删要删的

//库中查出的旧数据:$arr_old (处理过的一维数组)
//提交过来的新数据:$arr_new (得到的一维数组)

$intersect = array_intersect($arr_old, $arr_new); //交集(需要保留的部分,不用处理)
$result_del = array_diff($arr_old, $intersect);//旧数据中需要删除的
$result_add = array_diff($arr_new, $intersect);//新数据中需要增加的

//添加新增数据
if($result_add && is_array($result_add))
{
  foreach($result_add as $val)
  {
    $data_add = array('class_id'=>$id, 'lesson_id'=>$val); //数据
    $bool_add = $this->lesson_classes->lessonClassesAdd($data_add);//执行添加
  }
}

//删除需要清除的数据
if($result_del && is_array($result_del))
{
  foreach($result_del as $val)
  {
    $bool_del = $this->lesson_classes->lessonClassesDel($id, $val); //执行删除
  }
}
if($bool_add && $bool_del)
{
$this->show_tips('操作成功!');
}
else
{
$this->show_tips('操作失败!');
}

该方法特点:有针对性的添加数据和删除数据,较第一种方法,安全性高

希望本文所述对大家的PHP程序设计有所帮助。

PHP 相关文章推荐
支持oicq头像的留言簿(一)
Oct 09 PHP
php比较多维数组中值的大小排序实现代码
Sep 08 PHP
php 在windows下配置虚拟目录的方法介绍
Jun 26 PHP
PHP获取POST数据的几种方法汇总
Mar 03 PHP
CodeIgniter配置之autoload.php自动加载用法分析
Jan 20 PHP
YII视图整合kindeditor扩展的方法
Jul 13 PHP
老生常谈PHP数组函数array_merge(必看篇)
May 25 PHP
PHP在同一域名下两个不同的项目做独立登录机制详解
Sep 22 PHP
PHP PDO和消息队列的个人理解与应用实例分析
Nov 25 PHP
PHP中用Trait封装单例模式的实现
Dec 18 PHP
Yii框架安装简明教程
May 15 PHP
PHP 对接美团大众点评团购券(门票)的开发步骤
Apr 03 PHP
重新认识php array_merge函数
Aug 31 #PHP
浅析PHP中strlen和mb_strlen的区别
Aug 31 #PHP
PHP提示Deprecated: mysql_connect(): The mysql extension is deprecated的解决方法
Aug 28 #PHP
PHP实现数组递归转义的方法
Aug 28 #PHP
PHP之autoload运行机制实例分析
Aug 28 #PHP
php+MySQL判断update语句是否执行成功的方法
Aug 28 #PHP
PHP反射机制用法实例
Aug 28 #PHP
You might like
为IP查询添加GOOGLE地图功能的代码
2010/08/08 PHP
php限制上传文件类型并保存上传文件的方法
2015/03/13 PHP
PHP常见字符串操作函数与用法总结
2019/03/04 PHP
PHP lcfirst()函数定义与用法
2019/03/08 PHP
js计数器代码
2006/11/04 Javascript
ExtJs GridPanel简单的增删改实现代码
2010/08/26 Javascript
自己写的兼容ie和ff的在线文本编辑器类似ewebeditor
2012/12/12 Javascript
js实现一个省市区三级联动选择框代码分享
2013/03/06 Javascript
调用HttpHanlder的几种返回方式小结
2013/12/20 Javascript
jQuery中:last-child选择器用法实例
2014/12/31 Javascript
js的toLowerCase方法用法实例
2015/01/27 Javascript
jQuery消息提示框插件Tipso
2015/05/04 Javascript
javascript实现捕捉键盘上按下的键
2015/05/05 Javascript
angularjs在ng-repeat中使用ng-model遇到的问题
2016/01/21 Javascript
Bootstrap每天必学之日期控制
2016/03/07 Javascript
Bootstrap风格的zTree右键菜单
2017/02/17 Javascript
为什么使用koa2搭建微信第三方公众平台的原因
2018/05/16 Javascript
js中怎么判断两个字符串相等的实例
2019/01/17 Javascript
Vue服务端渲染实践之Web应用首屏耗时最优化方案
2019/03/22 Javascript
Vue实现push数组并删除的例子
2019/11/01 Javascript
小程序识别身份证,银行卡,营业执照,驾照的实现
2019/11/05 Javascript
[52:32]完美世界DOTA2联赛PWL S2 Magma vs LBZS 第三场 11.18
2020/11/18 DOTA
基于Python的接口测试框架实例
2016/11/04 Python
Python2.7编程中SQLite3基本操作方法示例
2017/08/09 Python
Java分治归并排序算法实例详解
2017/12/12 Python
Opencv实现抠图背景图替换功能
2019/05/21 Python
python和php哪个更适合写爬虫
2020/06/22 Python
python 装饰器重要在哪
2021/02/14 Python
C++面试题目
2013/06/25 面试题
《乞巧》教学反思
2014/02/27 职场文书
2014乡党委副书记党建工作汇报材料
2014/11/02 职场文书
事业单位年度考核个人总结
2015/02/12 职场文书
2015年新农合工作总结
2015/03/30 职场文书
金陵十三钗观后感
2015/06/04 职场文书
vscode中使用npm安装babel的方法
2021/08/02 Javascript
MySQL一劳永逸永久支持输入中文的方法实例
2022/08/05 MySQL