如果使用以下行可以更好地确保我的代码更安全。我应该使用filter_var函数的settype函数吗?
settype($number,'integer')
或
filter_var($number, FILTER_SANITIZE_NUMBER_INT);
感谢你
答案 0 :(得分:2)
正如documentation所说FILTER_SANITIZE_NUMBER_INT
:
删除除数字,加号和减号以外的所有字符。
因此,如果你期望在SQL查询中使用一个ID,我会使用正则表达式检查我是否只有数字/^[0-9]+$/
。因为FILTER_SANITIZE_NUMBER_INT
会允许-12
在这种情况下没有意义。
filter_var和settype之间的主要区别在于,将变量解析为字符串,并返回一个字符串,另一个将其转换为整数。
$string = "+12";
var_dump(filter_var($string, FILTER_SANITIZE_NUMBER_INT));
settype($string, "integer");
var_dump($string);
输出:
string(3) "+12"
int(12)
所以它真的取决于背景。
答案 1 :(得分:-3)
settype
和(int)
优于filter_var
。因为filter_var
有许多逻辑判断。