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中如何判断AJAX提交的数据
Feb 05 PHP
比较discuz和ecshop的截取字符串函数php版
Sep 03 PHP
input file获得文件根目录简单实现
Apr 26 PHP
PHP遍历并打印指定目录下所有文件实例
Feb 10 PHP
php常用字符串处理函数实例分析
Nov 22 PHP
浅谈ThinkPHP的URL重写
Nov 25 PHP
windows下配置php5.5开发环境及开发扩展
Dec 25 PHP
Yii2实现同时搜索多个字段的方法
Aug 10 PHP
php运行报错Call to undefined function curl_init()的最新解决方法
Nov 20 PHP
PHP微信发送推送消息乱码的解决方法
Feb 28 PHP
PHP中单例模式的使用场景与使用方法讲解
Mar 18 PHP
Linux系统下安装PHP7.3版本
Jun 26 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 5.0对象模型深度探索之对象复制
2008/03/27 PHP
php仿discuz分页效果代码
2008/10/02 PHP
PHP 日志缩略名的创建函数代码
2010/05/26 PHP
微信公众号支付之坑:调用支付jsapi缺少参数 timeStamp等错误解决方法
2016/01/12 PHP
PHP单链表的实现代码
2016/07/05 PHP
php 读取输出其他文件的实现方法
2016/07/26 PHP
JS 参数传递的实际应用代码分析
2009/09/13 Javascript
一个基于jquery的图片切换效果
2010/07/06 Javascript
鼠标放在图片上显示大图的JS代码
2013/03/26 Javascript
javascript中的=等号个数问题两个跟三个有什么区别
2013/10/23 Javascript
jQuery实现tab选项卡效果的方法
2015/07/08 Javascript
JavaScript快速切换繁体中文和简体中文的方法及网站支持简繁体切换的绝招
2016/03/07 Javascript
移动端jQuery修正Web页面滑动时div问题的两则实例
2016/05/30 Javascript
深入理解选择框脚本[推荐]
2016/12/13 Javascript
ionic2 tabs使用 Modal底部tab弹出框
2016/12/30 Javascript
JS触摸事件、手势事件详解
2017/05/04 Javascript
使用原生js写ajax实例(推荐)
2017/05/31 Javascript
vue.js实现刷新当前页面的方法教程
2017/07/05 Javascript
vue-cli实现多页面多路由的示例代码
2018/01/30 Javascript
angularjs实现table增加tr的方法
2018/02/27 Javascript
Angular学习教程之RouterLink花式跳转
2018/05/03 Javascript
layui table单元格事件修改值的方法
2019/09/24 Javascript
node.js域名解析实现方法详解
2019/11/05 Javascript
vue项目中使用eslint+prettier规范与检查代码的方法
2020/01/16 Javascript
[32:07]完美世界DOTA2联赛PWL S3 LBZS vs Rebirth 第一场 12.16
2020/12/17 DOTA
在PyCharm环境中使用Jupyter Notebook的两种方法总结
2018/05/24 Python
Pycharm如何打断点的方法步骤
2019/06/13 Python
python爬虫 requests-html的使用
2020/11/30 Python
解决PyCharm无法使用lxml库的问题(图解)
2020/12/22 Python
详解前端HTML5几种存储方式的总结
2016/12/27 HTML / CSS
美国床垫和床上用品公司:Nest Bedding
2017/06/12 全球购物
出国留学经济担保书
2014/04/01 职场文书
乡村教师党员四风问题对照检查材料思想汇报
2014/10/08 职场文书
2014年办公室人员工作总结
2014/12/09 职场文书
2015年教师学期工作总结
2015/04/30 职场文书
PHP连接MSSQL数据库案例,PHPWAMP多个PHP版本连接SQL Server数据库
2021/04/16 PHP