gpt4 book ai didi

mysql - 查询以返回与 IP 地址 block 匹配的行?

转载 作者:太空宇宙 更新时间:2023-11-03 10:59:17 24 4
gpt4 key购买 nike

我试图阻止某些 IP 地址和 IP 范围执行某些操作。现在,我 SELECT * FROM blocked WHERE ip=$_SERVER['REMOTE_ADDR'] 如果 ->num_rows 返回 > 0,我将重定向用户。

这适用于完整的 IP 地址,但如果我将 199.90.*.* 放入数据库,我该如何匹配它?另外,将 IP 存储在数据库中的最佳方式是什么?

最佳答案

你的问题的答案是使用like:

SELECT *
FROM blocked
WHERE $_SERVER['REMOTE_ADDR'] like replace(ip, '*', '%')

like 中的通配符是 '%' 而不是 '*',所以这会用百分号替换星号。我猜你实际上会存储像 '199.199.%.%' 这样的字符串,但上面的内容是为了清楚起见。

虽然这在技术上解决了您的问题,但它还有其他问题,因为 MySQL 可能不使用索引进行这些比较(参见 here)。影响取决于阻塞表的大小。如果它有 100 行,这可能不是问题。如果它有 100,000,那么它可能是。

对被阻止的表使用通配符的替代方法是将 FromIPToIP 作为列。然后,诸如“199.199..”之类的内容将简单地存储为“199.199.000.000”和“199.199.999.999”。查询将是:

where $_SERVER['REMOTE_ADDR'] between FromIP and ToIP

你会在 blocked(FromIP, ToIP) 上有一个索引。

关于mysql - 查询以返回与 IP 地址 block 匹配的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17220586/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com