我正在尝试创建一个有效的 sql 查询,该查询将在访问我们的登录页面时为我们数据库中已知或未知的 IP 地址提供准确的 FLAG。我用这个
// get the IP of the user on this landing page
$ip_address=$_SERVER['REMOTE_ADDR'];
echo $ip_address. ' ip address<br/>';
// see if we know this user..
$search_first="SELECT COUNT(DISTINCT(ip_address)) FROM `qb_sessions` WHERE `ip_address` = '$ip_address' ";
$has_ips = mysql_query($search_first);
$has_ip = mysql_num_rows($has_ips);
echo $has_ip. ' has IP<br/>'; // should show count in table
使用此代码段无法提供我需要的结果。如果表为空(与此 IP 不匹配),我仍然会得到一个“1”作为 $has_ip 的回显。如果没有匹配,我真的需要'0',如果这个 IP 之前已经记录在 qb_sessions
表中,我真的需要'> 1'。此代码段的目的是识别此着陆页上未注册的新点击,然后将其重定向到另一个页面,例如加入时事通讯、获取折扣券等。
我尝试了各种 sql 组合都无济于事,包括转义 (') $ip_address 引号。
提前感谢您的帮助。
最佳答案
... If the table is empty, (no match to this IP), I still get a '1' as the echo of
$has_ip
.
那是因为 MySQL 的 COUNT()
函数。无论表格包含 1 行还是 n 行,SELECT COUNT(...) ...
仍将返回恰好一行,其中包含一个数字,显示从返回的行数SELECT
查询。
既然您正在使用 PHP 的 mysql_num_rows()
函数来计算行数,请从您的 SELECT
查询中删除 COUNT()
。
$search_first="SELECT DISTINCT(ip_address) FROM `qb_sessions` ...
旁注: 不要使用 mysql_*
函数,它们从 PHP 5.5 开始被弃用,并在 PHP 7.0 中被完全删除。使用 mysqli
或 pdo
反而。 And this is why you shouldn't use mysql_*
functions .
关于php - 从登录页面提取 IP 并与已知用户进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44998738/