【问题标题】:mysql_escape_string VS mysql_real_escape_stringmysql_escape_string VS mysql_real_escape_string
【发布时间】:2010-09-08 07:42:39
【问题描述】:

所以这是我们都应该知道的,当我第一次看到它时,它就在我脑海中浮现..

我知道 mysql_escape_string 已从 5.3 中弃用,但 mysql_real_escape_string 的实际区别是什么。

我认为mysql_real_escape_stringmysql_escape_string 完全相同,只是mysql_real_escape_string 为mysql 资源提供了第二个参数。

所以我很直截了当地认为,字符串的处理方式肯定有所不同,因为不需要 2 个函数。

然后我认为差异完全取决于语言环境和字符编码。 ?

谁能帮我解决这个问题?

【问题讨论】:

    标签: php escaping mysql-real-escape-string mysql-escape-string


    【解决方案1】:

    不同之处在于mysql_escape_string 只是将字符串视为原始字节,并在它认为合适的地方添加转义。

    另一方面,mysql_real_escape_string 使用有关用于 MySQL 连接的字符集的信息。这意味着字符串在正确处理多字节字符时被转义;即,它不会在字符中间插入转义字符。这就是为什么您需要mysql_real_escape_string 的连接;有必要知道应该如何处理字符串。

    但是,与其转义,不如使用 MySQLi 库中的参数化查询;转义例程中以前存在错误,并且有可能再次出现。对查询进行参数化要麻烦得多,因此您不太可能受到 MySQL 错误的影响。

    【讨论】:

    • 我使用 PDO,这只是我出于教育目的需要了解的内容。
    • 还有一个 mysqli_escape_string()。是否也与 mysql_escape_string 做同样的事情?如果 mysql_escape_string 已被弃用,为什么在 mysqli 中还有这个函数可用???
    • @Lykos:mysqli_escape_string is an alias for mysqli_real_escape_string,所以问题只适用于旧的 mysql_* 函数。我认为这样做是为了方便人们从 mysql 迁移到 mysqli。
    • 所以 mysqli_escape_string() 或 mysqli_real_escape_string() 都做同样的事情,对吧?
    • @Lykos:正确,但正如我在答案中所写,您应该更喜欢参数化查询而不是转义。但是,如果你必须,那么你可以使用任何一个 - 但我可能更喜欢使用 mysqli_real_escape_string,这样如果你出于某种原因需要修改脚本以在只有旧的服务器上运行,你就不会无意中引入错误mysql 模块。
    【解决方案2】:

    嗯...有点,是的。它考虑了 MySQL 连接的字符集。

    http://php.net/mysql_escape_string

    此函数与mysql_real_escape_string() 相同,只是mysql_real_escape_string() 采用连接处理程序并根据当前字符集转义字符串。 mysql_escape_string() 不接受连接参数并且不遵守当前字符集设置。

    【讨论】:

      【解决方案3】:

      mysql_escape_string 并未从 5.3 中弃用,但适用于 4.3.0 及更高版本。 所以任何使用 PHP 版本以上/或 4.3.0 的人都应该使用mysql_real_escape_string

      如果使用php < 4.3.0,则不要从php.ini 中生成magic_quotes_gpc active,虽然建议更新,但如果您的代码有问题,请确保使用magic_quotes_gpcaddslash 函数而不是mysql_escape_string.

      【讨论】:

        【解决方案4】:

        现在这两个函数都在

        中被弃用了

        PHP 4 >= 4.3.0 和 PHP 5。 他们建议使用PDO_MySQL 扩展

        【讨论】:

          猜你喜欢
          • 2015-03-08
          • 1970-01-01
          • 2011-07-21
          • 1970-01-01
          • 2011-03-29
          • 2012-10-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多