我正确使用FILTER_VALIDATE_INT + FILTER_SANITIZE_NUMBER_INT吗?

时间:2014-07-28 10:54:29

标签: php mysqli

尝试验证然后清理$ _GET请求。我只是想知道我是否遗漏了任何东西。

这是我的......

if (isset($_GET['id'])) {
    $id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT);
        if (!$id) {
           echo 'Error';
           exit();
        }
    $id = filter_input(INPUT_GET, 'id', FILTER_SANITIZE_NUMBER_INT);
    $getinfo = mysqli_query($link, sprintf("SELECT column1, column2 FROM table WHERE id = '%s'", mysqli_real_escape_string($link, $id)));
        $row = mysqli_fetch_assoc($getinfo);
            if (!$row) {
             echo 'Error';
             exit();
            }
    //execute rest of code
}

另外,我知道我应该使用PDO,并且我计划在某些时候将所有内容转换为该内容,但我想知道我现在使用mysqli以正确的方式执行此操作。

我想我也有点困惑......如果我先使用FILTER_VALIDATE_INT,我甚至需要在之后使用FILTER_SANITIZE_NUMBER_INT吗?我已经在检查它是否纯粹是INT ......

编辑:编辑以添加FILTER_VALIDATE_INT的错误处理。

1 个答案:

答案 0 :(得分:6)

确实,你不需要那样做。您要么验证,进行清理。

验证是二进制结果,它是原始值或false 消毒总是给你一个结果,但这可能与原始输入有很多关系,也可能没有多少关系。它只是保证你得到你所要求的东西,任何输入都会被压缩到你要求的任何模式中(这里是一个整数)。

将两种技术结合使用并没有多大意义。