我有一个以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
}
答案 0 :(得分:2)
取决于。
is_numeric
允许使用十六进制表示法。如果你在查询中用引号括起来那么它只会产生0
,但如果你没有,那么它将被正确解释。 is_numeric
也允许科学记数法,它也会遇到同样的问题。
就个人而言,我建议intval()
,但mysql_real_escape_string
更安全。
如果它是函数名称的长度,只需执行此操作并忘记它:
function esc($str) {return mysql_real_escape_string($str);}