На Дубликате ключа правильного использования? Не работает. MySQL / переполнение стека

Я пытаюсь записать IP-адреса пользователей на моем сайте, и я хочу, чтобы при входе пользователя в систему выполнялся следующий поток

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, но это не сработало.

Моя БД выглядит так:

введите описание изображения здесь

и это выходит так:

ip_address   user_id
10.245.1.38  378
10.245.1.38  378

1

Решение

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

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

Это создает уникальное ограничение для конкретной комбинации IP-адреса и идентификатора пользователя.


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

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]