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