59

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

我知道这mysql_escape_string已从 5.3 中弃用,但mysql_real_escape_string.

我认为这与除了为 mysql 资源提供第二个参数外mysql_real_escape_string完全相同。mysql_escape_stringmysql_real_escape_string

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

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

谁能帮我解决这个问题?

4

4 回答 4

92

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

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

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

于 2010-09-08T07:51:05.600 回答
3

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

http://php.net/mysql_escape_string

mysql_real_escape_string()除了mysql_real_escape_string()采用连接处理程序并根据当前字符集转义字符串之外,此函数与 相同。mysql_escape_string()不接受连接参数并且不尊重当前的字符集设置。

于 2010-09-08T07:49:27.647 回答
3

mysql_escape_string从 5.3 开始不被弃用,但对于 4.3.0 及更高版本。所以任何使用 PHP 版本以上/或 4.3.0 的人都应该使用mysql_real_escape_string.

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

于 2011-08-29T10:48:53.397 回答
1

现在这两个函数都被弃用了

PHP 4 >= 4.3.0 和 PHP 5。他们推荐使用PDO_MySQL扩展

于 2013-06-26T02:25:17.070 回答