Я пытаюсь записать 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
Не похоже, что у вас есть уникальный индекс для этих двух столбцов. Вы можете добавить уникальный индекс в вашу таблицу с помощью следующего:
ALTER TABLE user_ip
ADD UNIQUE `unique_user_ip_address_user_id`(`ip_address`, `user_id`);
Это создает уникальное ограничение для конкретной комбинации IP-адреса и идентификатора пользователя.
Как предложение, вы можете добавить третий столбец к вашему user_ip
таблица для отслеживания, когда была предпринята попытка входа в систему, и обновите это поле до текущей метки времени, если есть дублирующий ключ.
Других решений пока нет …