【问题标题】:Check whether an IP address is stored in database检查IP地址是否存储在数据库中
【发布时间】:2011-12-29 19:25:00
【问题描述】:

我有一个数据库,其中有一个名为“IP”的表。它有 2 列 Id(int11)ip(varchar15),以及带有值的行:id 1, ip 127.0.0.1

现在回到 PHP 我有以下内容:

$ip = $_SERVER['REMOTE_ADDR'];
$query = "SELECT * FROM ip WHERE ip='$ip'";

if(mysql_query($query)) {
    echo "Ip is already in database";   
}
else {
    echo "Ip is not in database";
}

现在我遇到的问题是,如果我将 IP 更改为:125.0.0.1

,if 语句仍然变为 TRUE

我已经尝试修复它 2 个小时,但仍然无法弄清楚我做错了什么。

【问题讨论】:

  • 顺便说一句,通过将 IP 地址存储为整数可以提高效率。使用 MySQL 函数 INET_ATON 和 INET_NTOA 在地址和整数之间进行转换,并为 ip 使用 UNSIGNED INT 列。好处是固定的行大小、更快的索引以及因此更快的查找。
  • 好吧,我喜欢更快!我现在会努力做到这一点。

标签: php mysql database ip


【解决方案1】:

mysql_query() 如果查询执行成功,即使没有结果也不会返回 false。尝试改用mysql_num_rows()

$ip = mysql_real_escape_string($_SERVER['REMOTE_ADDR']);
$query = "SELECT * FROM ip WHERE ip='$ip'";
$result = mysql_query($query);

if (mysql_num_rows($result) > 0) {
  echo "Ip is already in database";
}
else { 
  echo "Ip is not in database";
}

顺便说一句,我在 REMOTE_ADDR 变量周围添加了 mysql_real_escape_string,您应该始终清理您的输入 :)

【讨论】:

  • 感谢您的快速回复,它就像一个魅力!关于 mysql_real_escape_string。也有人可以操纵它吗?
  • 老实说,我不完全确定,我的直觉认为有人可能会向该变量注入恶意值,但我不确定。如果我自己没有明确设置 var,我总是会谨慎行事 :)
【解决方案2】:

使用 mysql_num_rows 检查记录数!

$query = mysql_query("SELECT * FROM ip WHERE ip='". $_SERVER['REMOTE_ADDR'] ."'");
$num = mysql_num_rows($query);

if($num > 0) {
  echo "Exists";
}
else {
  echo "Does not exist";
}

【讨论】:

  • 也感谢 Wesso 的快速回复!
猜你喜欢
  • 2011-10-30
  • 2013-08-22
  • 2012-01-25
  • 1970-01-01
  • 1970-01-01
  • 2012-05-22
  • 2017-09-02
  • 2016-12-10
  • 1970-01-01
相关资源
最近更新 更多