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 相关文章推荐
人大复印资料处理程序_输入篇
Oct 09 PHP
社区(php&&mysql)三
Oct 09 PHP
仿AS3实现PHP 事件机制实现代码
Jan 27 PHP
php中如何同时使用session和cookie来保存用户登录信息
Jul 05 PHP
ThinkPHP之M方法实例详解
Jun 20 PHP
php合并数组中相同元素的方法
Nov 13 PHP
thinkPHP学习笔记之安装配置篇
Mar 05 PHP
PHP使用DirectoryIterator显示下拉文件列表的方法
Mar 13 PHP
PHP中异常处理的一些方法整理
Jul 03 PHP
PHP实现数据库统计时间戳按天分组输出数据的方法
Oct 10 PHP
PHP接口继承及接口多继承原理与实现方法详解
Oct 18 PHP
Laravel学习教程之model validation的使用示例
Oct 23 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
php中出现空白页的原因及解决方法汇总
2014/07/08 PHP
Apache启动报错No space left on device: AH00023该怎么解决
2015/10/16 PHP
PHP 多进程与信号中断实现多任务常驻内存管理实例方法
2019/10/04 PHP
jquery异步跨域访问代码
2013/06/28 Javascript
js 获取元素下面所有li的两种方法
2014/04/14 Javascript
Javascript实现的常用算法(如冒泡、快速、鸽巢、奇偶等)
2014/04/29 Javascript
基于jQuery实现下拉框
2014/11/24 Javascript
IE下使用jQuery重置iframe地址时内存泄露问题解决办法
2015/02/05 Javascript
基于jQuery实现的仿百度首页滑动选项卡效果代码
2015/11/16 Javascript
Bootstrap 粘页脚效果
2016/03/28 Javascript
深入理解javascript中的 “this”
2017/01/17 Javascript
JavaScript解析JSON格式数据的方法示例
2017/01/24 Javascript
十大 Node.js 的 Web 框架(快速提升工作效率)
2017/06/30 Javascript
详解IOS微信上Vue单页面应用JSSDK签名失败解决方案
2018/11/14 Javascript
使用mixins实现elementUI表单全局验证的解决方法
2019/04/02 Javascript
vue 验证码界面实现点击后标灰并设置div按钮不可点击状态
2019/10/28 Javascript
js实现拖动缓动效果
2020/01/13 Javascript
python和shell变量互相传递的几种方法
2013/11/20 Python
Python实现远程调用MetaSploit的方法
2014/08/22 Python
python实现根据ip地址反向查找主机名称的方法
2015/04/29 Python
Python中的id()函数指的什么
2017/10/17 Python
python绘制条形图方法代码详解
2017/12/19 Python
Flask 让jsonify返回的json串支持中文显示的方法
2018/03/26 Python
使用Scrapy爬取动态数据
2018/10/21 Python
python爬虫获取新浪新闻教学
2018/12/23 Python
Python这样操作能存储100多万行的xlsx文件
2019/04/16 Python
pandas DataFrame的修改方法(值、列、索引)
2019/08/02 Python
解决python 读取excel时 日期变成数字并加.0的问题
2019/10/08 Python
Django 项目通过加载不同env文件来区分不同环境
2020/02/17 Python
Python动态强类型解释型语言原理解析
2020/03/25 Python
CSS3中的5个有趣的新技术
2009/04/02 HTML / CSS
BOSE德国官网:尽探索之力,享音乐之极
2016/12/11 全球购物
英国奢华护肤、美容和Spa品牌:Temple Spa
2019/11/02 全球购物
公司试用期员工自我评价
2014/09/17 职场文书
教师批评与自我批评心得体会
2014/10/16 职场文书
分布式架构Redis中有哪些数据结构及底层实现原理
2022/03/13 Redis