完美解决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 相关文章推荐
推荐文章系统(一)
Oct 09 PHP
如何删除多级目录
Oct 09 PHP
php 文件上传系统手记
Oct 26 PHP
PHP反转字符串函数strrev()函数的用法
Feb 04 PHP
Mac环境下php操作mysql数据库的方法分享
May 11 PHP
简单谈谈favicon
Jun 10 PHP
PHP中SSO Cookie登录分析和实现
Nov 06 PHP
php5.2的curl-bug 服务器被php进程卡死问题排查
Sep 19 PHP
万能的php分页类
Jul 06 PHP
php递归函数怎么用才有效
Feb 24 PHP
PHP判断访客是否手机端(移动端浏览器)访问的方法总结【4种方法】
Mar 27 PHP
php利用ZipArchive类操作文件的实例
Jan 21 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
c#中的实现php中的preg_replace
2009/12/21 PHP
php清空(删除)指定目录下的文件,不删除目录文件夹的实现代码
2014/09/04 PHP
用js计算页面执行时间的函数
2006/12/07 Javascript
用javascript getComputedStyle获取和设置style的原理
2008/10/10 Javascript
jQuery学习3:操作元素属性和特性
2010/02/07 Javascript
javascript下高性能字符串连接StringBuffer类
2010/08/16 Javascript
解决Extjs上传图片无法预览的解决方法
2012/03/22 Javascript
Ext JS 4官方文档之三 -- 类体系概述与实践
2012/12/16 Javascript
jquery简单瀑布流实现原理及ie8下测试代码
2013/01/23 Javascript
JavaScript包装对象使用介绍
2013/08/29 Javascript
深入理解Javascript中的循环优化
2013/11/09 Javascript
教你如何在 Javascript 文件里使用 .Net MVC Razor 语法
2014/07/23 Javascript
Json实现异步请求提交评论无需跳转其他页面
2014/10/11 Javascript
jquery利用json实现页面之间传值的实例解析
2016/12/12 Javascript
微信小程序 获取二维码实例详解
2017/06/23 Javascript
通过源码分析Vue的双向数据绑定详解
2017/09/24 Javascript
JavaScript 中定义函数用 var foo = function () {} 和 function foo()区别介绍
2018/03/01 Javascript
轻松搞定jQuery+JSONP跨域请求的解决方案
2018/03/06 jQuery
vue 点击按钮增加一行的方法
2018/09/07 Javascript
vue-cli 3.x 配置Axios(proxyTable)跨域代理方法
2018/09/19 Javascript
vue实现移动端input上传视频、音频
2020/08/18 Javascript
[01:25:09]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS DT第二场
2014/05/24 DOTA
[03:30]DOTA2完美“圣”典精彩集锦
2016/12/27 DOTA
Python的collections模块中namedtuple结构使用示例
2016/07/07 Python
在pandas中一次性删除dataframe的多个列方法
2018/04/10 Python
Python 实现使用dict 创建二维数据、DataFrame
2018/04/13 Python
Python异常处理操作实例详解
2018/08/28 Python
关于pytorch处理类别不平衡的问题
2019/12/31 Python
python+selenium 脚本实现每天自动登记的思路详解
2020/03/11 Python
CSS3实现圆角、阴影、透明效果并兼容各大浏览器
2014/08/08 HTML / CSS
捷克体育用品购物网站:D-sport
2017/12/28 全球购物
运动会入场解说词
2014/02/07 职场文书
博士毕业生自我鉴定范文
2014/04/13 职场文书
2016年春季运动会通讯稿
2015/11/25 职场文书
学生早退检讨书(范文)
2019/08/19 职场文书
SQL中的连接查询详解
2022/06/21 SQL Server