Я использую:
INSERT INTO `rating` (`name`, `user`, `rating`, `section`, `ip`) VALUES ('$name', '{$_SESSION['user']}', '$rate', '$section', '{$_SERVER['REMOTE_ADDR']}');";
Я хотел бы добавить условие if в выражении IF так, чтобы.
IF SELECT ip from rating where ip={$_SERVER['REMOTE_ADDR']} AND section=$section AND name=$name then update ELSE INSERT new row
это выполнимо, или я лучше закодирую его в php? Большое спасибо
Ps: Я знаю, как это сделать с php, я хочу изучить его с помощью MySQL.
Также я требую, чтобы все 3 имени, раздела, ip соответствовали не только ip
Чтобы расширить отличный ответ Эрика.
Чтобы добавить уникальное ограничение для каждого из столбцов ip, name, section, запустите следующий код в базе данных
ALTER TABLE `test`.`rating` ADD UNIQUE INDEX `name`(`name`), ADD UNIQUE INDEX `section`(`section`), ADD UNIQUE INDEX `ip`(`ip`);
Для запуска уникального ограничения на комбинацию столбцов ip + name + section выполните:
ALTER TABLE `test`.`rating` ADD UNIQUE INDEX `name_section_ip`(`name`, `section`, `ip`);
Последнее, вероятно, то, что вы хотите.
Одна последняя вещь
Я не уверен на 100%, но это использование {$_SERVER['REMOTE_ADDR']}
в запросе не выглядит безопасным для SQL-инъекций.
Подумайте об этом:
$remote_adr = mysql_real_escape_string($_SERVER['REMOTE_ADDR']); $session = mysql_real_escape_string($_SESSION['user']); $query = "INSERT INTO `rating` (`name`, `user`, `rating`, `section`, `ip`) VALUES ('$name', '$session', '$rate', '$section','$remote_adr')";
Наконец, положив ";" в mysql_query()
как и mysql_query("select * from x;");
не работает mysql_query()
будет выполнять только один запрос и отклонит ваш ;
,
Предполагая, что у вас есть уникальное ограничение ( UNIQUE
index или PRIMARY KEY
) на ip, разделе и имени, вы можете использовать этот синтаксис:
INSERT INTO `rating` (`name`, `user`, `rating`, `section`, `ip`) VALUES ('$name', '{$_SESSION['user']}', '$rate', '$section', '{$_SERVER['REMOTE_ADDR']}') ON DUPLICATE KEY UPDATE user = VALUES(user), rating = VALUES(rating);