我希望每个用户只根据他/她的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';
}
答案 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());
}
}