@lemonlimelike

Как сделать чтоб одинаковые записи не заносились в бд?

Нужно чтоб запись повторно не заносилась в бд. Правильно ли я делаю?

вот код
$ip = $_SERVER["REMOTE_ADDR"];
$country = json_encode($SxGeo->getCountry($ip));
$intoip = mysqli_query($connection, "INSERT INTO views(ip, country)  VALUES('$ip', '$country')");


Хочу чтоб $ip повторно не заносилась в бд, т.е. это будет так?
if(mysqli_num_rows($ip) > 1){
     Что будет тут?
}
  • Вопрос задан
  • 727 просмотров
Решения вопроса 1
@Batlab
PHP Senior | Python Middle | JS Junior
Делаешь проверку перед записью. Не нужно делать что-то, если запись есть. Нужно делать что-то, если записи нету.
if(mysqli_num_rows($ip) == 0){
     //Записываем в базу
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
AlexKeller
@AlexKeller
Чтобы запись не заносилась 2 раз, должны быть уникальные ключи в таблице
Ответ написан
Комментировать
Stalker_RED
@Stalker_RED
Чтобы не делать каждый раз проверку можно сделать ip ключем и вставлять при помощи INSERT ... ON DUPLICATE KEY UPDATE
Ответ написан
Комментировать
Нужно добавить ключ Unique к полям, по которым вы не хотите дубликатов. В вашем случае можно сделать так:
CREATE UNIQUE INDEX ip_unique_index ON ТАБЛИЦА_С_IP (ip);

И делать такого рода запросы при добавлении
INSERT INTO views(ip, country)  VALUES('$ip', '$country') on duplicate key update `ip`=values('ip')


Тем самым БД сервер, при попытка внести запись, упрется в уникальный ключ. Т.к. в запросе будет указана команда on duplicate key update сервер просто обновит значение в строчке. Удачи!
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы