Query picture我有一个名为黑名单的表,有start_ip和end_ip列,我需要使用mysql查询来检查我的变量$stat_ip(一个名为Hasoffers的表中的另一列)是否在范围(即大于或等于start_ip和小于或等于last_ip )之间。我的查询类似于这样的$result=mysql_query("Select inet_aton(network_start_ip),inet_aton(network_last_ip) from blacklisted‘“.$stat_ip.’BETWEEN inet_aton(network_start_ip) AND inet_aton(network_last_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;
}
?>发布于 2017-03-08 19:59:11
您需要在from Hasoffers查询上执行inet_aton。像这样
$pl=mysql_query("SELECT inet_aton(stat_ip) from Hasoffers");
$count=mysql_num_rows($pl);如果不这样做,inet_aton $stat_ip就有了点的价值。例如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_query("SELECT stat_ip from Hasoffers");
while($row=mysql_fetch_array($pl))
{
$stat_ip=$row['stat_ip'];
echo ip($stat_ip)."<br>";
//for converting to LongInt
$ip_Num=ip2long($stat_ip);
}
// Now pass $ip_Num instead of $stat_ip in your function
function blacklisted($ip_Num)发布于 2017-03-08 20:20:14
您可以在下面的代码行中安装ip2long(ipaddress)函数
**$ip_Num=str_replace('.','',$stat_ip);**ip2long是工作行inet_aton() mysql function.ip2long是一个php函数,例如:
$ip = '10.0.5.9';printf("%u\n",ip2long($ip));
167773449
https://stackoverflow.com/questions/42670569
复制相似问题