mysql_escape_string VS mysql_real_escape_string

mysql_escape_string VS mysql_real_escape_string

提问人:RobertPitt 提问时间:9/8/2010 最后编辑:DharmanRobertPitt 更新时间:4/23/2022 访问量:70712

问:

我知道它已从 5.3 中弃用,但 .mysql_escape_stringmysql_real_escape_string

我所想的是,这与 mysql 资源的第二个参数完全相同。mysql_real_escape_stringmysql_escape_stringmysql_real_escape_string

所以后来我想,在如何处理字符串方面肯定有一些区别,因为不需要 2 个函数。

所以后来我认为差异纯粹在于语言环境和字符编码?

PHP的 逃避 mysql-real-escape字符串

评论


答:

3赞 deceze 9/8/2010 #1

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

http://php.net/mysql_escape_string

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

94赞 Michael Madsen 9/8/2010 #2

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

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

但是,与其转义,不如使用 MySQLi 库中的参数化查询;转义程序中以前存在错误,并且可能会再次出现一些错误。参数化查询更难搞砸,因此您不太可能受到 MySQL 错误的影响。

评论

0赞 RobertPitt 9/8/2010
我使用 PDO,这只是出于教育目的我需要知道的东西。
0赞 ltdev 3/22/2013
还有一个 mysqli_escape_string()。也做和mysql_escape_string一样的事情吗??如果mysql_escape_string被弃用,为什么在MySQLI中也有这个函数可用???
2赞 Michael Madsen 3/22/2013
@Lykos:mysqli_escape_string 是 mysqli_real_escape_string 的别名,因此该问题仅适用于旧的 mysql_* 函数。我认为这是为了方便人们从 mysql 迁移到 mysqli。
1赞 ltdev 3/22/2013
所以 mysqli_escape_string() 或 mysqli_real_escape_string() 都做同样的事情,对吧?
0赞 Michael Madsen 3/22/2013
@Lykos:没错,但正如我在答案中所写的,你真的应该更喜欢参数化查询而不是转义。但是,如果必须的话,那么您可以使用其中任何一个 - 但我可能更喜欢使用mysqli_real_escape_string,这样您就不会无意中引入错误,如果您出于某种原因需要修改脚本以在只有旧 mysql 模块的服务器上运行。
3赞 Rocky Sharma 8/29/2011 #3

mysql_escape_string从 5.3 起不推荐使用,但对于 4.3.0 及更高版本。 因此,任何使用PHP以上版本/或4.3.0的人都应该使用。mysql_real_escape_string

如果使用 ,而不是让你从php.ini,虽然建议更新,但如果你的代码会有问题,那么请确保你使用,而不是 。php < 4.3.0magic_quotes_gpc activemagic_quotes_gpcaddslashmysql_escape_string

1赞 Jeff_Alieffson 6/26/2013 #4

现在,这两个函数都已弃用

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