仅在用户的ip是唯一的时才执行查询

时间:2010-12-28 13:29:15

标签: php sql mysql

我希望每个用户只根据他/她的IP地址将数据保存到数据库一次。我有一个包含url,日期,时间和ip列表的数据库。如何检查ip是否已存在,如果不存在 - 将数据插入数据库,否则什么都不做?到目前为止,这是我的代码:

<Check if IP already exists in the database - if no - insert:>


$query = "INSERT INTO link (url, date, time, ip) VALUES ('$ref','$date','$time', '$someip')";
mysql_query($query) or die('Error, insert query failed');

}
else {

echo 'This ip already exists';

}

3 个答案:

答案 0 :(得分:8)

在数据库中查询具有匹配ip的行。然后,您可以使用mysql_num_rows来确定返回的行数。

$sql = "SELECT * FROM link WHERE ip = '127.0.0.1' LIMIT 1";
$query = mysql_query($sql);

if(mysql_num_rows($query) == 0)
{
  // IP  does not exist, proceed with insert.
}

127.0.0.1显然应该是一个变量。您可以使用$_SERVER['REMOTE_ADDR']获取用户IP。

答案 1 :(得分:2)

在ip列上放置一个唯一索引。如果插入重复,将返回错误。这样您就不需要在数据库上执行额外的查询。只需确保以正确的方式处理您收到的错误(或者只是忽略错误)。

CREATE UNIQUE INDEX name_of_index ON tablename (columns_to_index);

答案 2 :(得分:2)

在列上创建唯一索引:

CREATE UNIQUE INDEX ix_link_ip ON link (ip)

并检查插入错误:

$query = "INSERT INTO link (url, date, time, ip) VALUES ('$ref','$date','$time', '$someip')";
$res = mysql_query($query);
if (!$res) {
        if (mysql_errno() == 1062) /* unique key violation */
                die('This IP already exists');
        else
                die(mysql_error());
}


}