正如我所知,所有的mysql(不使用MySQLi扩展)功能都不再可观,它们基本上已被弃用。因此,我现在正在使用MySQLi扩展。 对于我正在编码的新脚本,我想知道在使用预准备语句之前是否应该转义字符串。如果你应该逃避,那么最好的方法是什么?
我目前的功能如下,但我认为它不是有效的,甚至是不必要的。
function clean($string){
return mysql_real_escape_string($string);
}
答案 0 :(得分:1)
如果有更好的方法,请告诉我如何,谢谢。
是
function format_mysql_string($string){
return "'".mysql_real_escape_string($string)."'";
}
mysql_real_escape_string
没有“清理”任何东西。 答案 1 :(得分:1)
好的,所以你已经发现你不应该使用mysql_xxx()
函数。那很好。
备选方案是mysqli
和PDO
库。
这两个库都提供了与mysql_real_escape_string
等效的函数,但它们也提供了一个更好的替代方法,称为参数化查询(或准备语句)。
这是使用变量编写查询的另一种方法,与使用转义字符串方法相比,这被认为是更好的做法。
您可以使用占位符而不是变量来定义查询;像这样的东西:
SELECT * FROM table WHERE id = :id
其中:id
是占位符。
使用占位符调用带有上述查询的函数,然后单独调用以将变量与每个占位符相关联。
mysqli
和PDO
库之间的确切代码不同,但在这两种情况下,变量都与查询分开发送到数据库服务器,因此不存在SQL的可能性注射攻击。
PDO库通常被认为是更好的选择。以下是一些指向优秀网站的链接,以及如何编写代码的示例:
希望有所帮助。