如何检查包含ip地址的php变量是否位于inet_aton格式的两个ip地址范围内

如何检查包含ip地址的php变量是否位于inet_aton格式的两个ip地址范围内,php,mysql,Php,Mysql,我有一个名为blacklisted的表,有两列start_ip和end_ip,我需要使用mysql查询检查我的变量$stat_ip(来自一个名为Hasoffers的表的另一列)是否在范围内,即大于或等于start_ip和小于或等于last_ip。我的查询是这样的$result=mysql\u query(“从黑名单中选择inet\u aton(网络开始\u ip)、inet\u aton(网络最后一次\u ip)”。$stat\u ip。“”介于inet\u aton(网络开始\u ip)和in

我有一个名为blacklisted的表,有两列start_ip和end_ip,我需要使用mysql查询检查我的变量$stat_ip(来自一个名为Hasoffers的表的另一列)是否在范围内,即大于或等于start_ip和小于或等于last_ip。我的查询是这样的$result=mysql\u query(“从黑名单中选择inet\u aton(网络开始\u ip)、inet\u aton(网络最后一次\u ip)”。$stat\u ip。“”介于inet\u aton(网络开始\u ip)和inet\u aton(网络最后一次\u ip)之间)。这将返回一个0计数,这不是预期的输出。感谢您对mysql查询的帮助

<?php
include('adodb/adodb.inc.php');
$link=mysql_connect("166.26.18.122","vcc","abcd1234");
mysql_select_db("vcc");
$pl=mysql_query("SELECT stat_ip fromHasoffers");
$count=mysql_num_rows($pl);

while($row=mysql_fetch_array($pl))
{
$stat_ip=$row['stat_ip'];
echo ip($stat_ip)."<br>";
$ip_Num=ip2long($stat_ip);
}

function blacklisted($ip_Num)
{
    $result=mysql_query("Select inet_aton(network_start_ip),inet_aton(network_last_ip) from blacklisted where '".$ip_Num."' BETWEEN  inet_aton(network_start_ip) AND inet_aton(network_last_ip)");
    $count=mysql_num_rows($result);


  return $count;

}
?>

您需要在您的from-Hasoffers查询上执行inet\aton。像这样

$pl=mysql_query("SELECT inet_aton(stat_ip) from Hasoffers");
$count=mysql_num_rows($pl);
不做inet_aton$stat_ip就有点价值。e、 g.192.168.0.1

所以你的第二个问题是

Select inet_aton(network_start_ip),inet_aton(network_last_ip) from blacklisted where '192.168.0.1' BETWEEN  inet_aton(network_start_ip) AND inet_aton(network_last_ip)
简而言之,更改第一个查询,希望它能解决您的问题

更新 正如您所说,您无法更改您的查询。 试试这个

$pl=mysql\u查询(“从Hasoffers中选择stat\u ip”);
while($row=mysql\u fetch\u数组($pl))
{
$stat_ip=$row['stat_ip'];
回声ip($stat_ip)。“
”; //用于转换为LongInt $ip_Num=ip2long($stat_ip); } //现在在函数中传递$ip_Num而不是$stat_ip 功能被列入黑名单($ip_Num)
您可以使用ip2long(ipaddress)功能代替下线

        **$ip_Num=str_replace('.','',$stat_ip);**
ip2long是一个工作线inet_aton()mysql函数。ip2long是一个php函数 例如:

$ip='10.0.5.9'; printf(“%u\n”,ip2long($ip))


167773449

我无法更改我的查询,因为我还需要ip4格式的$stat_ip用于其他函数,因此如果可以执行类似$stat_ip=$row['inet_-aton(stat_-ip)')的操作,或者您可以建议的任何操作,这将只替换ip中的点(.),但是inet_-aton会将ip转换为int格式。这应该是怎么回事。@AasthaKathuria使用这个函数将IP转换为long将可以做到。我按照你说的做了,在我的查询中将变量也更改为$IP_Num,但计数仍然为零。你能检查一下这个查询是否正确吗。我编辑了我的上述代码。@AasthaKathuria请要么死(mysql_error());在查询结束时检查错误是什么。ip2long thing可以工作,但查询返回零计数。你能检查一下这个查询吗?给我发送数据库数据的屏幕截图你需要看到什么?$select_query=“从黑名单中选择inet_aton(网络启动ip),inet_aton(网络最后一个ip)”。$ip_Num.”在inet_aton(网络启动ip)和inet_aton(网络最后一个ip)之间;echo$res//发送此查询此查询返回一个空集,这是我的问题。
        **$ip_Num=str_replace('.','',$stat_ip);**