(int)和is_int()是否安全可以防止SQL注入?

Rih*_*rds 6 php mysqli sql-injection

所以我想知道这是否安全,用户不会进行任何SQL注入,数字只会是整数?getArticle函数中的$ id绑定到SQL查询.

<?php $id = (isset($_GET['id']) && is_int((int)$_GET['id'])) ? (int)$_GET['id'] : false ?>
<?php $news = $class->getArticle($id) ?>
Run Code Online (Sandbox Code Playgroud)

到目前为止,我测试它工作正常,但因为我不完全确定我宁愿问你guyz!好吧,人们说准备好的陈述可以解决问题.他们真的会吗?就像,我可以完全确定如果将参数绑定为整数,那么它将是整数吗?

提前致谢!

Sar*_*raz 10

您只需键入将它们转换为正确的类型:

$number = intval($_GET['id']);
$string = mysql_real_escape_string(strval($_GET['str']));
Run Code Online (Sandbox Code Playgroud)

确保你得到你期望的东西.

更好的解决方案是使用Prepared语句来避免sql注入.

  • 同意,为什么不使用*Prepared语句*而忘记参数检查. (7认同)

And*_*ter 5

使用预备陈述.没有理由不使用它们.那你就不用问"这还不错吗?"