避免对诸如数字之类的已定义值类型进行SQL注入的最佳方法是验证值。因为与mysqli准备相比,这样做更容易。在PHP中,我们可以这样做。
1. if(!is_numeric($value)) {$value=0;} 2. $value=floatval($value); 3. $value=intval($value); 4. $value=$value * 1;
什么是最可靠的?还是更好的主意?
更新: 尽管我在最初的问题中已经说过,但是大多数人都强调了参数化查询的有用性。无疑,这是避免SQL注入的最有效方法。但是,当我们可以简单地验证整数数值时;恕我直言,无需参数化。
对于整数和浮点数,如果不想执行参数化查询,则可以使用它。
$clean_number = (int)$value; $clean_number = (float)$value;
这些实际上将值转换为int和float,这比intval()和更快floatval(),例如,因为它不会遭受函数开销。
int
float
intval()
floatval()