2016-10-11 31 views
1

我想在我的網站記錄用戶的IP地址,我想有當重複鍵正確使用?不工作。 MySQL的/ PHP

if (new ip address detected) 
    enter in to db 
else if (ip address has already been recorded) 
    do nothing 

因此,用戶登錄,我沒有記錄每一次用戶登錄以下流只要它來自新的IP地址。我以爲我有正確的代碼,但重複仍然進入數據庫。任何人都可以看到我要去哪裏嗎?

public function insertIpAddress($user_id, $user_ip) { 
    return $this->dbHandler->DbQuery("INSERT into user_ip (user_id, ip_address) 
        VALUES (?,?) ON DUPLICATE KEY UPDATE `user_id` = `user_id`", 
        array($user_id,$user_ip)); 
} 

我也試圖對重複密鑰更新ip_address = ip_address,但沒有奏效。

我的DB是這樣的:

enter image description here

而且它出來是這樣的:

ip_address user_id 
10.245.1.38 378 
10.245.1.38 378 
+1

也許在列上設置唯一鍵? – RonaldPK

+0

在這種情況下,您甚至不需要重複的密鑰更新,只需要一個唯一的索引/主鍵和一個簡單的插入。 – Shadow

回答

5

它不會出現,你必須爲這兩個列的唯一索引。您可以添加一個唯一索引你的表如下:

ALTER TABLE user_ip 
    ADD UNIQUE `unique_user_ip_address_user_id`(`ip_address`, `user_id`); 

這將創建一個IP地址和用戶ID的特定組合的唯一約束。


作爲一個建議,你可以第三列添加到您的user_ip表來跟蹤時,嘗試登錄並更新該字段爲當前的時間戳是否有重複鍵。

+0

非常感謝克里斯,我會試試這個。我不應該改變我的代碼的其餘部分,那麼我應該? – user1180888

+0

我在那裏創建的UNIQUE列沒有顯示在「結構」中,但它表示它已成功創建。這是正常的嗎? – user1180888

+1

您不應該需要按原樣更改代碼。我對phpMyAdmin界面並不熟悉,你可以運行'SHOW CREATE TABLE user_ip'並查看顯示的內容嗎? –