转换为int而不是mysql_real_escape_string是否安全

时间:2012-10-14 15:45:37

标签: php mysql mysql-real-escape-string

只是想知道,我的应用程序需要尽可能快,并且变量已经被转换为int,所以如果可以避免,我也不想转义字符串。

示例是:

$var1 = (int)$_POST['number1'] //User input;
mysql_query("INSERT INTO ... $var1 ..");

在所有情况下都是安全的,还是我也应该mysql_real_escape_string $var1

有时我也是md5()vars而不是逃避它们,但我想这没关系。

4 个答案:

答案 0 :(得分:7)

是的,它在所有情况下都是安全的,尽管您可能想要检查$_POST['number1']是否也是有效整数,以避免发出通知。

而且,即使你说

  

我只是想知道安全性,不要太担心首选 [sic] 方法和编码标准。

我仍然建议你使用预备语句。

答案 1 :(得分:6)

是的,这是安全的,但需要注意的是,任何非有效整数的值都将被强制转换为0,这可能会导致副作用。

正如minitech所说,使用准备好的陈述真的应该是要走的路,因为你不必再担心这个了。

然而,更重要的是,性能在这里并不是真正的问题,并且不值得考虑。无论你是逃避还是不逃避字符串,都不会影响你的应用程序的性能(至少不是因为它不是兆字节大)。过早优化通常是浪费时间 - 这种“优化”只会使代码更难以阅读和理解,从长远来看这更为重要。

答案 2 :(得分:3)

正如minitech所说,良好的做法是确保你检查它是一个整数。使用准备好的语句确实更安全,我最近接受了PDO并且不会再回去了。

答案 3 :(得分:2)

这是安全的,但要记住,任何字符串都会被强制转换为0,而不是null或类似的东西。