-1

正如我所知,所有的 mysql(不使用 MySQLi 扩展)功能不再重要,它们基本上已被弃用。因此,我现在使用 MySQLi 扩展。对于我正在编码的新脚本,我想知道在使用准备好的语句之前是否应该转义字符串。如果你应该逃跑,那么最好的方法是什么?

我目前的功能如下,但我不认为它是有效的,甚至是不必要的。

function clean($string){
    return mysql_real_escape_string($string);
}
4

2 回答 2

1

如果有更好的方法请告诉我方法,谢谢。

是的

function format_mysql_string($string){
  return "'".mysql_real_escape_string($string)."'";
}
  • 它的名称中没有“清洁”一词,因为mysql_real_escape_string它没有“清洁”任何东西。
  • 它的名称中有“格式”和“字符串”这两个词,因为这个函数必须用于格式化 SQL 字符串,仅此而已。
  • 它确实添加了引号,因为字符串格式需要引号。因此,如果您尝试格式化其他任何内容,您的查询将失败 - 因此,您将知道您需要另一个度量。
于 2013-04-03T13:24:08.653 回答
1

好的,所以你已经发现你不应该使用这些mysql_xxx()函数。那挺好的。

替代方案是mysqliPDO库。

这两个库都提供与 等效的功能mysql_real_escape_string,但它们也提供了更好的替代方案,称为参数化查询(或准备好的语句)。

这是使用变量编写查询的另一种方法,被认为比使用转义字符串方法更好。

发生的情况是您使用占位符而不是变量来定义查询;像这样的东西:

SELECT * FROM table WHERE id = :id

:id占位符在哪里。

您使用上面的查询调用一个带有占位符的函数,然后单独调用以将您的变量与每个占位符相关联。

mysqli和库之间的确切代码不同PDO,但在这两种情况下,变量都与查询分开发送到数据库服务器,因此没有 SQL 注入攻击的机会。

PDO 库通常被认为是更好的选择。以下是一些优秀网站的链接,其中包含如何编写代码的示例:

希望有帮助。

于 2013-04-03T20:01:56.293 回答