2016-10-11 7 views
1

Я пытаюсь записать IP-адреса пользователей на моем сайте, и я хочу иметь следующий поток при входе пользователя наВ правильном использовании Duplicate key? Не работает. MySQL/PHP

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

Так что я не запись каждый раз, когда пользователь входит on, только если это новый 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)); 
} 

Я также попытался дублированием KEY UPDATE ip_address = ip_address, но это не сработало.

My 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-адреса и идентификатор пользователя.


Как предложение, вы можете добавить третий столбец в таблице user_ip, чтобы отслеживать, когда была предпринята попытка Войти и обновить это поле в текущей временной метки, если есть дубликат ключа.

+0

Большое спасибо Крис, я попробую это. Мне не нужно менять остальную часть кода, не так ли? – user1180888

+0

УНИКАЛЬНЫЙ столбец, который я создал там, не отображается в 'структуре', но он говорит, что он был создан успешно. Это нормально? – user1180888

+1

Вам не нужно менять код как есть. Я не очень хорошо знаком с интерфейсом phpMyAdmin; вы можете запустить 'SHOW CREATE TABLE user_ip' и посмотреть, что это показывает? –