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 相关文章推荐
PHP配置心得包含MYSQL5乱码解决
Nov 20 PHP
php函数的常用方法及注意之处小结
Jul 10 PHP
php shell超强免杀、减少体积工具实现代码
Oct 16 PHP
对于PHP 5.4 你必须要知道的
Aug 07 PHP
Yii2组件之多图上传插件FileInput的详细使用教程
Jun 20 PHP
thinkPHP实现的省市区三级联动功能示例
May 05 PHP
PHP基于DateTime类解决Unix时间戳与日期互转问题【针对1970年前及2038年后时间戳】
Jun 13 PHP
PHP的PDO大对象(LOBs)
Jan 27 PHP
PHP面向对象类型约束用法分析
Jun 12 PHP
ThinkPHP5.1框架数据库链接和增删改查操作示例
Aug 03 PHP
thinkphp5.1框架中容器(Container)和门面(Facade)的实现方法分析
Aug 05 PHP
TP5框架model常见操作示例小结【增删改查、聚合、时间戳、软删除等】
Apr 05 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
使用sockets:从新闻组中获取文章(三)
2006/10/09 PHP
PHP入门速成教程
2007/03/19 PHP
php实现parent调用父类的构造方法与被覆写的方法
2015/02/11 PHP
php获取微信共享收货地址的方法
2017/12/21 PHP
Laravel 对某一列进行筛选然后求和sum()的例子
2019/10/10 PHP
一些不错的js函数ajax
2008/08/20 Javascript
JavaScript的null和undefined区别示例介绍
2014/09/15 Javascript
BootStrap glyphicons 字体图标实现方法
2016/05/01 Javascript
jQuery 3.0 的 setter和getter 模式详解
2016/07/11 Javascript
js将字符串中的每一个单词的首字母变为大写其余均为小写
2017/01/05 Javascript
详解Vue改变数组中对象的属性不重新渲染View的解决方案
2018/09/21 Javascript
angularJs select绑定的model取不到值的解决方法
2018/10/08 Javascript
vue动态禁用控件绑定disable的例子
2019/10/28 Javascript
Vue watch响应数据实现方法解析
2020/07/10 Javascript
jdk1.8+vue elementui实现多级菜单功能
2020/09/24 Javascript
微信小程序实现加入购物车滑动轨迹
2020/11/18 Javascript
JQuery绑定事件四种实现方法解析
2020/12/02 jQuery
vue中使用echarts的示例
2021/01/03 Vue.js
[04:44]DOTA2英雄梦之声_第12期_矮人直升机
2014/06/21 DOTA
Django REST framework视图的用法
2019/01/16 Python
Python自动抢红包教程详解
2019/06/11 Python
python字符串替换第一个字符串的方法
2019/06/26 Python
python 生成器和迭代器的原理解析
2019/10/12 Python
python自动化unittest yaml使用过程解析
2020/02/03 Python
CSS3中新增的对文本和字体的设置
2020/02/03 HTML / CSS
HTML5 SEO优化的一些建议
2020/08/27 HTML / CSS
StubHub智利:购买和出售您的门票
2016/11/23 全球购物
来自世界各地的饮料:Flavourly
2019/05/06 全球购物
财务方面个人工作的自我评价
2013/12/28 职场文书
小学生学雷锋演讲稿
2014/04/25 职场文书
六查六看自检自查剖析材料
2014/10/14 职场文书
计划生育工作汇报
2014/10/28 职场文书
男人帮观后感
2015/06/18 职场文书
学校扫黄打非工作总结
2015/10/15 职场文书
2016新教师岗前培训心得体会
2016/01/08 职场文书
Pygame Time时间控制的具体使用详解
2021/11/17 Python