1

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

而不是应用 mysql_real_escape_string,我可以只使用 is_numeric 吗?

像这样:

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 每次使用都需要访问数据库。为什么在验证整数时这样做?

编辑2:

此外,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
}
4

1 回答 1

2

这取决于。

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

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

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

function esc($str) {return mysql_real_escape_string($str);}
于 2012-08-09T00:21:44.077 回答