mysql_real_escape_string()中链接标识符的重要性

时间:2009-12-30 01:02:29

标签: php mysql

使用mysql_real_escape_string()时,为什么需要将链接标识符作为输入。我知道该函数应该与MySQL查询一起使用,但该函数实际上只是一个字符串操作。

3 个答案:

答案 0 :(得分:6)

来自the PHP manual

  

转义unescaped_string中的特殊字符,同时考虑连接的当前字符集,以便将其放在mysql_query()中是安全的。如果要插入二进制数据,则必须使用此功能。

  

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

确定字符集需要连接。

答案 1 :(得分: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()的结果可能被服务器误解(期望另一个编码,因此不同的转义规则)。
而且,即使你只有一个连接也没有伤害(你可以绝对肯定地说,直到时间结束都会如此吗?)只是一直传递它。

答案 2 :(得分:1)

mysql_real_escape_string

  

转义unescaped_string中的特殊字符, 考虑到连接的当前字符集 ,以便将它放在mysql_query()中是安全的。