mysql通配符IN数据库

时间:2014-05-12 01:37:15

标签: php mysql sql

我有一个在线游戏,我想禁止重复犯罪者注册。

我通过在表中存储ip地址做了一个简单的ip-ban,代码看起来像这样:

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

// if num results > 0, then the user is not allowed to register

然而,一些用户不断更改他们的IP地址以便回来。 所以我希望能够将ip-ranges添加到数据库中 f.ex 187.15.200。*

现在我该怎样做这样的事情?

我想它可以使用包含反向LIKE的查询,但我不知道如何制定它

example: SELECT * FROM banned WHERE '$ipadr' like ip%

1 个答案:

答案 0 :(得分:0)

你需要一个像这样的php函数来获取ip地址的前三个元素的IP地址,这样你就可以这样查询它们。

function GetFirstThree($ip) { // fnkr user wrote this function in another post just to give him credit
    if(strlen($ip) <= 10) {
        $pos = strpos($ip, '.', strlen($ip)-3);
    } else {
        $pos = strpos($ip, '.', strlen($ip)-4);
    }
    $ip = substr($ip, 0, $pos);
    $ip = substr($ip, 0, strlen($ip));
    return $ip;
}

查看我链接的帖子,看看获取ip地址的前三个元素的适当方法..一旦你拥有它只是一个简单的like在mysql中使用通配符。

使用通配符执行查询。

SELECT * FROM banned WHERE '$ipadr' like '{$ip}%'

post