2009-12-30 35 views

回答

6

the PHP manual

逃逸的unescaped_string特殊字符,并考虑到当前字符集的连接,从而可以安全地将其用于mysql_query()。如果要插入二进制数据,则必须使用此功能。

和:

如果没有指定链路标识符,则假定由mysql_connect()打开的最后一个环节。如果没有找到这样的链接,它会尝试创建一个,就好像调用mysql_connect()时没有参数一样。如果未找到或建立连接,则会生成E_WARNING级别错误。

需要连接来确定字符集。

1

mysql_real_escape_string

逃逸的unescaped_string特殊字符,考虑到当前字符集的连接,这样可以安全地将其用于mysql_query()。

3

具有http://ilia.ws/archives/103-mysql_real_escape_string-versus-Prepared-Statements.html

读取例如,如果正在使用GBK字符集,也不会转换无效的多字节序列0xbf27(¿“)成0xbf5c27(¿\”或在GBK单个有效的多字节字符,后跟单引号)。为了确定正确的转义方法mysql_real_escape_string()需要知道使用的字符集,通常从数据库连接游标中检索。

也许是这篇文章的后果,但很明显在函数mysql_set_charset()已被添加到mysql扩展。 charset是mysql连接(资源)的一个属性。
如果你有多个连接,你应该将它们传递给mysql_real_escape_string()(并且总是使用mysql_set_charset()而不是SET NAMES)。
如果您没有传递连接资源,该函数将使用脚本建立的最后一个连接。如果两个(或多个连接)的字符集不同,real_escape_string()的结果可能会被服务器错误地解释(期待另一个编码,因此有不同的转义规则)。
即使你只有一个连接(你可以绝对肯定地说,这将是如此,直到时间结束?),因此它并没有伤害,只是通过它总是。