完美解决Thinkphp3.2中插入相同数据的问题


Posted in PHP onAugust 01, 2017

问题描述

今天在使用TP3.2插入数据的时候,为了避免插入相同的数据(所谓相同的数据,其主键相同或者是唯一索引的字段相同),我创建的索引如下图,主键索引为自增字段,不可能出现重复,即唯一索引可能会出现重复,我希望的是uid,year,mounth,day 这三个字段出现相同的话,就更新当前记录。

完美解决Thinkphp3.2中插入相同数据的问题

问题解决办法

在之前面对这样的问题的时候,我们知道,MySQL提供了ON DUPLICATE KEY UPDATE或者REPLACE INTO来解决。

使用ON DUPLICATE KEY UPDATE

插入数据之前,表中就一条记录,如下图

完美解决Thinkphp3.2中插入相同数据的问题

SQL语句如下,当插入记录时候,与表中已有记录相同,则更新改条记录,否则插入记录。

INSERT INTO `work_log` (
`uid`,
`year`,
`mounth`,
`day`,
`status`
) 
VALUES
(1, 2016, 6, 3, 1) 
ON DUPLICATE KEY 
UPDATE 
`status` = 
VALUES
(`status`),
`updated_ts` = NOW();

完美解决Thinkphp3.2中插入相同数据的问题

使用REPLACE INTO

代码如下:

先执行如下代码插入一条数据

REPLACE INTO `work_log` (
`uid`,
`year`,
`mounth`,
`day`,
`status`
) 
VALUES
(1, 2016, 6, 2, 1)

效果如下图

完美解决Thinkphp3.2中插入相同数据的问题

再次执行如下代码,就会更新上面插入的代码

REPLACE INTO `work_log` (
`uid`,
`year`,
`mounth`,
`day`,
`status`
) 
VALUES
(1, 2016, 6, 2, 5)

效果如下图

完美解决Thinkphp3.2中插入相同数据的问题

ON DUPLICATE KEY UPDATE与REPLACE INTO区别

当出现相同的值时候,ON DUPLICATE KEY UPDATE是更新已经存在的记录,REPLACE INTO是删除之前的记录,然后插入新的记录。

Thinkphp3.2中解决办法

在Thinkphp3.2中,通过add()函数的第三个参数来处理插入相同数据的问题。

Model.class.PHP中add()方法,调用了Db.class.php中insert中方法,在insert方法中,我们可以看到有如下代码:

完美解决Thinkphp3.2中插入相同数据的问题

其中$replace 正好是add方法中第三个参数。

以上这篇完美解决Thinkphp3.2中插入相同数据的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
php框架Phpbean说明
Jan 10 PHP
PHP采集相关教程之一 CURL函数库
Feb 15 PHP
jQuery 源码分析笔记
May 25 PHP
Can't create/write to file 'C:\WINDOWS\TEMP\...MYSQL报错解决方法
Jun 30 PHP
php实现执行某一操作时弹出确认、取消对话框
Dec 30 PHP
destoon后台网站设置变成空白的解决方法
Jun 21 PHP
php+mysql大量用户登录解决方案分析
Dec 29 PHP
基于PHP实现数据分页显示功能
May 26 PHP
php获取linux命令结果的实例
Mar 13 PHP
thinkPHP5.0框架模块设计详解
Mar 18 PHP
PHP中include和require的区别实例分析
May 07 PHP
Yii框架安装简明教程
May 15 PHP
TP3.2批量上传文件或图片 同名冲突问题的解决方法
Aug 01 #PHP
如何修改yii2.0自带的user表为其它的表
Aug 01 #PHP
修改yii2.0用户登录使用的user表为其它的表实现方法(推荐)
Aug 01 #PHP
Nginx下ThinkPHP5的配置方法详解
Aug 01 #PHP
PHP读取word文档的方法分析【基于COM组件】
Aug 01 #PHP
[原创]PHP正则匹配中英文、数字及下划线的方法【用户名验证】
Aug 01 #PHP
php中文乱码问题的终极解决方案汇总
Aug 01 #PHP
You might like
用PHP读取和编写XML DOM的实现代码
2011/02/03 PHP
PHP程序员基本要求和必备技能
2014/05/09 PHP
php获取用户浏览器版本的方法
2015/01/03 PHP
php开发中的页面跳转方法总结
2015/04/26 PHP
为你总结一些php系统类函数
2015/10/21 PHP
php 生成加密公钥加密私钥实例详解
2017/06/16 PHP
解决laravel 出现ajax请求419(unknown status)的问题
2019/09/03 PHP
查找页面中所有类为test的结点的方法
2014/03/28 Javascript
邮箱下拉自动填充选择示例代码附图
2014/04/03 Javascript
Node.js模块加载详解
2014/08/16 Javascript
JS实现网页顶部向下滑出的全国城市切换导航效果
2015/08/22 Javascript
jQuery过滤选择器用法示例
2016/09/12 Javascript
JS基于正则截取替换特定字符之间字符串操作示例
2017/02/03 Javascript
javascript性能优化之分时函数的介绍
2018/03/28 Javascript
解决jQuery使用append添加的元素事件无效的问题
2018/08/30 jQuery
详解vue如何使用rules对表单字段进行校验
2018/10/17 Javascript
微信小程序实现签到功能
2018/10/31 Javascript
Vue 页面权限控制和登陆验证功能的实例代码
2019/06/20 Javascript
Vue.js 中的实用工具方法【推荐】
2019/07/04 Javascript
基于Vue中的父子传值问题解决
2020/07/27 Javascript
python让图片按照exif信息里的创建时间进行排序的方法
2015/03/16 Python
在Django的视图中使用数据库查询的方法
2015/07/16 Python
Python复制Word内容并使用格式设字体与大小实例代码
2018/01/22 Python
Python机器学习算法之k均值聚类(k-means)
2018/02/23 Python
matplotlib subplots 调整子图间矩的实例
2018/05/25 Python
python中ImageTk.PhotoImage()不显示图片却不报错问题解决
2018/12/06 Python
详解解决Python memory error的问题(四种解决方案)
2019/08/08 Python
使用OpenCV实现仿射变换—缩放功能
2019/08/29 Python
使用CSS3和Checkbox实现JQuery的一些效果
2015/08/03 HTML / CSS
Clarks鞋法国官方网站:英国其乐鞋品牌
2018/02/11 全球购物
美国台面电器和厨具品牌:KitchenAid
2019/04/12 全球购物
Java 中访问数据库的步骤?Statement 和PreparedStatement 之间的区别?
2012/06/05 面试题
毕业生简单求职信
2013/11/19 职场文书
建材投资建议书
2014/05/16 职场文书
群众路线对照检查剖析材料
2014/10/09 职场文书
教师读书笔记
2015/06/29 职场文书