检查数据库中的重复项并运行函数

时间:2013-08-30 03:11:07

标签: php mysql

好的所以我需要检查ip_adress是否已经在我的数据库中,如果我需要更新行'visit'并添加1.如果它没有退出然后将ip_adress添加到我的数据库'ip_adress'这里是我的代码:

<?php include'connect.php';
//Test if it is a shared client
if (!empty($_SERVER['HTTP_CLIENT_IP'])){
$ip=$_SERVER['HTTP_CLIENT_IP'];
//Is it a proxy address
}elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){
$ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
}else{
$ip=$_SERVER['REMOTE_ADDR'];
}

$ip = ip2long($ip);


$result = mysqli_query($con,"SELECT ip_adress FROM ip_visits");

while($row = mysqli_fetch_array($result))
{
  $ip_adress = $row['ip_adress'];
  if($ip_adress === $ip){
        mysqli_query($con,"UPDATE ip_visits SET ip_adress = ip_adress + 1");
  }else{
        mysqli_query($con,"INSERT INTO ip_visits (ip_adress) VALUES ('$ip')");
  }

}

mysqli_close($con);
?>

2 个答案:

答案 0 :(得分:0)

UNIQUE上创建ip_adress密钥,然后

INSERT INTO ip_visits (ip_adress)
  VALUES ('$ip')
  ON DUPLICATE KEY
    UPDATE visits=visits+1

除了使用参数化查询外。

答案 1 :(得分:0)

我认为你正在寻找的逻辑正是@Ignacio Vazquez-Abrams向你展示的。

它是这样的:

1)告诉MySql插入所需的表格。

2)向它解释,如果找到重复的密钥,你宁愿更新它更新。

CODE:

INSERT INTO table (a,b,c) VALUES (1,2,3)
  ON DUPLICATE KEY UPDATE c=c+1;

这或多或少等于说:

UPDATE table SET c=c+1 WHERE a=1;

执行INSERT部分的好处是UPDATE如果找不到任何要更新的内容,则无法执行任何操作。

所以,INSERT,UPDATE组合就像是一石二鸟。

您可以在这里阅读更多内容:

http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

只需注意,请确保您的表至少包含主键和auto_increment字段