【发布时间】:2012-08-23 13:54:52
【问题描述】:
过去几周我一直在学习 PHP 和 MySQL,我现在才听说准备好的语句和 PDO/mysqli。我做了一些阅读,人们说这样的话:
$getFromDatabase = mysql_query("SELECT * FROM table WHERE userid='$id'");
while($row = mysql_fetch_assoc($getFromDatabase)){
stuff();
}
...不会再工作了。我在我的代码中经常使用类似的东西。我也在阅读很多关于准备好的语句如何更好地防止注入的内容。我已经彻底了解了它是如何变得更好的,但是它是否值得从 mysql_real_escape_string() 切换出来?是否需要切换到Mysqli或PDO?在什么情况下,mysql_real_escape_string() 可以在准备好的语句无法绕过的情况下被绕过?
【问题讨论】:
-
它现在可以工作...
mysql_*()函数正面临未来弃用。建议开始远离它们。 -
而准备好的语句优于
mysql_real_escape_string()的主要原因是你。您可以并且在某些时候会忘记调用它。我们都这样做了。 -
P.S.
$id周围不应有单引号。这是一个数字,而不是字符串文字。你不引用数字。 -
@DanGrossman 如果 ID 是 GUID 怎么办?
标签: php mysql pdo mysqli sql-injection