在进入mysql PHP之前清理字符串

时间:2013-04-03 13:20:59

标签: php mysql

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

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

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

2 个答案:

答案 0 :(得分:1)

  

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

function format_mysql_string($string){
  return "'".mysql_real_escape_string($string)."'";
}
  • 它的名字中没有“干净”字样,因为mysql_real_escape_string没有“清理”任何东西。
  • 它的名称中包含“format”和“string”字样,因为此函数必须用于格式化SQL字符串,而不是其他任何内容。
  • 它确实添加了引号,因为字符串格式需要引号。因此,如果您尝试格式化其他任何内容,您的查询将失败 - 因此,您将知道您需要另一个度量。

答案 1 :(得分:1)

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

备选方案是mysqliPDO库。

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

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

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

SELECT * FROM table WHERE id = :id

其中:id是占位符。

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

mysqliPDO库之间的确切代码不同,但在这两种情况下,变量都与查询分开发送到数据库服务器,因此不存在SQL的可能性注射攻击。

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

希望有所帮助。