我用:
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中更好地编码? 非常感谢你
P.s:我知道如何使用php,我想用MySQL学习它。
另外我要求所有3个名字,部分,ip不仅匹配ip
答案 0 :(得分:6)
假设您在ip,section和name上有唯一约束(UNIQUE
索引或PRIMARY KEY
),您可以使用以下语法:
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);
答案 1 :(得分:3)
扩展Eric的优秀答案。
要在每个列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 do:
ALTER TABLE `test`.`rating`
ADD UNIQUE INDEX `name_section_ip`(`name`, `section`, `ip`);
最后一件事可能就是你想要的。
最后一件事
我不是100%肯定,但在查询中使用{$_SERVER['REMOTE_ADDR']}
看起来并不安全
考虑将其更改为:
$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()
只会执行一个查询并拒绝您的;
。