日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php 重复写入数据,完美解决Thinkphp3.2中插入相同数据的问题

發布時間:2023/12/19 php 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php 重复写入数据,完美解决Thinkphp3.2中插入相同数据的问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

問題描述

今天在使用TP3.2插入數據的時候,為了避免插入相同的數據(所謂相同的數據,其主鍵相同或者是唯一索引的字段相同),我創建的索引如下圖,主鍵索引為自增字段,不可能出現重復,即唯一索引可能會出現重復,我希望的是uid,year,mounth,day 這三個字段出現相同的話,就更新當前記錄。

問題解決辦法

在之前面對這樣的問題的時候,我們知道,MySQL提供了ON DUPLICATE KEY UPDATE或者REPLACE INTO來解決。

使用ON DUPLICATE KEY UPDATE

插入數據之前,表中就一條記錄,如下圖

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();

使用REPLACE INTO

代碼如下:

先執行如下代碼插入一條數據

REPLACE INTO `work_log` (

`uid`,

`year`,

`mounth`,

`day`,

`status`

)

VALUES

(1, 2016, 6, 2, 1)

效果如下圖

再次執行如下代碼,就會更新上面插入的代碼

REPLACE INTO `work_log` (

`uid`,

`year`,

`mounth`,

`day`,

`status`

)

VALUES

(1, 2016, 6, 2, 5)

效果如下圖

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方法中,我們可以看到有如下代碼:

其中$replace 正好是add方法中第三個參數。

以上這篇完美解決Thinkphp3.2中插入相同數據的問題就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

總結

以上是生活随笔為你收集整理的php 重复写入数据,完美解决Thinkphp3.2中插入相同数据的问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。