is_numeric()是否消除了对数值数据的mysql_real_escape_string()的需求? PHP

时间:2012-08-09 00:18:49

标签: php mysql security escaping

我有一个以MySQL表ID为输入的函数。

我可以使用is_numeric吗?

而不是应用mysql_real_escape_string

像这样:

protected function validId($id) {
    if(!is_numeric($id)) return false; 
    // else do stuff
}

编辑:

我还想提一下,我有时会用过这个:

$ val =(int)$ val;

以下是PHP文档中关于类型转换的部分:http://php.net/manual/en/language.types.type-juggling.php#language.types.typecasting

另外,我相信mysql_real_escape_string需要在每次使用时都能点击数据库。为什么在验证整数时呢?

EDIT2:

此外,is_int()将无法使用表单输入,这就是我使用is_numeric的原因。但也许做这样的事情可以解决问题,更快地工作/减少服务器负载:

protected function validId($id) {
    if(!is_numeric($id)) return false;  // confirm it is number or numeric string
    $id = (int) $id; // cast to int (will chop off decimals I believe)
    // do stuff
}

1 个答案:

答案 0 :(得分:2)

取决于。

is_numeric允许使用十六进制表示法。如果你在查询中用引号括起来那么它只会产生0,但如果你没有,那么它将被正确解释。 is_numeric也允许科学记数法,它也会遇到同样的问题。

就个人而言,我建议intval(),但mysql_real_escape_string更安全。

如果它是函数名称的长度,只需执行此操作并忘记它:

function esc($str) {return mysql_real_escape_string($str);}