我将使用PhP符号表示变量,以简化生活。
假设数据库是UTF-8,客户端设置为UTF-8。
问题有两个方面。知道'(引用)的ASCII为39十进制:
客户端 当使用诸如 real_escape_string()之类的函数对查询变量$ title进行转义时,该函数是否会单独转义所有值为39的字节?或者它会看到值39的字节是否是UTF-8符号的一部分?
服务器端
SELECT * from STORIES WHERE title = 'Hello'
MYSQL假设查询编码是什么?这包括部分:
SELECT * from STORIES WHERE title = '
然后,如果$ filteredTitle恰好有一个字节39,它是UTF-8符号的一部分,那么MYSQL如何知道它不是引用?
答案 0 :(得分:0)
让我们看两个问题。
提供SELECT
语句时,字符串必须"转义"。否则,引号内的引号会出现语法问题。特别是'
,"
和\
必须以反斜杠开头,以避免混淆。 mysqli_real_escape_string()
提供该功能。 (不要使用mysql_real_escape_string()
,它属于已弃用的mysql_*
API。)否"取消转义" SELECT
字符串时需要。
ascii撇号(十进制39,十六进制27,有时称为"单引号和#34;)在许多编程语言中通常用于引用字符串。一长串utf8"报价"可以找到here。