MySQL:如果此ip没有任何记录,请插入

时间:2011-06-01 21:11:59

标签: php mysql sql

我用:

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

2 个答案:

答案 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()只会执行一个查询并拒绝您的;