使用mysql_real_escape_string()时,为什么需要将链接标识符作为输入。我知道该函数应该与MySQL查询一起使用,但该函数实际上只是一个字符串操作。
答案 0 :(得分:6)
转义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)
转义unescaped_string中的特殊字符, 考虑到连接的当前字符集 ,以便将它放在mysql_query()中是安全的。