只是想知道,我的应用程序需要尽可能快,并且变量已经转换为 int,所以如果可以避免,我也不想转义字符串。
示例是:
$var1 = (int)$_POST['number1'] //User input;
mysql_query("INSERT INTO ... $var1 ..");
在所有情况下都是安全的还是我也应该使用 mysql_real_escape_string $var1
?
有时我也 md5() vars 而不是转义它们,但我想这没关系。
只是想知道,我的应用程序需要尽可能快,并且变量已经转换为 int,所以如果可以避免,我也不想转义字符串。
示例是:
$var1 = (int)$_POST['number1'] //User input;
mysql_query("INSERT INTO ... $var1 ..");
在所有情况下都是安全的还是我也应该使用 mysql_real_escape_string $var1
?
有时我也 md5() vars 而不是转义它们,但我想这没关系。
是的,它在所有情况下都是安全的,尽管您可能还想检查是否$_POST['number1']
是一个有效的整数,以避免通知。
而且,即使你说
我只是想知道安全性,不太担心首选的[原文如此]方法和编码标准。
我仍然建议您使用准备好的语句。
是的,这将是安全的,但需要注意的是,任何不是有效整数的值都将被强制转换为0
,这可能会导致副作用。
正如 minitech 所说,使用准备好的语句确实应该是要走的路,因为你再也不用担心这个了。
然而,更重要的是,性能在这里并不是真正的问题,也不值得考虑。无论您转义还是不转义字符串都不会影响您的应用程序的性能(至少如果它不是兆字节大的话)。过早的优化通常是浪费时间——这样的“优化”只会使代码更难阅读和理解,从长远来看,这更重要。
正如 minitech 所说,良好的做法是还要确保您检查它是一个整数。不过,使用准备好的语句确实会更安全,我最近接受了 PDO 并且不会回去。
这是安全的,但请记住,任何字符串都将被强制转换为 0,而不是 null 或类似的东西。