mysql_real_escape_string_quote(MYSQL * MYSQL, char *to, const char *from, unsigned long length, char quote)
这个函数为SQL语句创建一个合法的SQL字符串。看到字符串字面值.
的mysql
参数必须是有效的开放连接,因为字符转义取决于服务器使用的字符集。
的字符串从
参数被编码以生成一个转义的SQL字符串,同时考虑到连接的当前字符集。结果被放置在来
参数,后跟终止空字节。
字符编码\
,'
,"
,空
(ASCII 0),\ n
,r \
、控制+ Z和`
.严格地说,MySQL只要求对查询中用于引用字符串的反斜杠和引号字符进行转义。mysql_real_escape_string_quote ()
引用其他字符,使它们在日志文件中更容易读取。有关比较,请参阅字面值字符串的引用规则和报价()
SQL函数字符串字面值,字符串函数和操作符.
如果ANSI_QUOTES
启用SQL模式,mysql_real_escape_string_quote ()
不能用于转义双引号字符,以便在双引号标识符中使用。(该函数无法判断是否启用了确定正确转义字符的模式。)
绳子指向旁边从
必须长度
个字节长。您必须分配来
缓冲区的最小值长度* 2 + 1
个字节长。(在最坏的情况下,可能需要将每个字符编码为使用两个字节,并且必须为结束的空字节留出空间。)当mysql_real_escape_string_quote ()
的内容来
以空结尾的字符串。返回值是已编码字符串的长度,不包括结束的空字节。
的报价
参数指示要放置转义字符串的上下文。假设你想要逃离从
参数并插入转义字符串(在这里由str
)变成下列任何一种陈述:
1) SELECT * FROM table WHERE name = 'str2) SELECT * FROM table WHERE name = "str" 3) select * from 'strWHERE id = 103
要正确地为每个语句执行转义,请调用mysql_real_escape_string_quote ()
如下所示,其中最后一个参数表示引用上下文:
1) len = mysql_real_escape_string_quote(&mysql,to,from,from_len,'\ ");2) len = mysql_real_escape_string_quote(&mysql,to,from,from_len,' ' ');3) len = mysql_real_escape_string_quote(&mysql,to,from,from_len,' ");
如果必须更改连接的字符集,请使用mysql_set_character_set ()
函数而不是执行组名称
(或设置字符集
)语句。mysql_set_character_set ()
就像组名称
也会影响使用的字符集mysql_real_escape_string_quote ()
,这组名称
没有。
对象中插入两个转义字符串插入
语句,每个语句都在单引号字符内:
查询[1000]char, *结束;end = my_stpcy(查询,"INSERT INTO test_table VALUES('");end += mysql_real_escape_string_quote(&mysql,end,"这是什么",12,'\ ");结束= my_stpcpy(结束,“”,“”);End += mysql_real_escape_string_quote(&mysql, End,"binary data: \0\r\n",16,'\ ");结束= my_stpcpy(”)”);if (mysql_real_query(&mysql,query,(unsigned int) (end - query)) {fprintf(stderr, "Failed to insert row, Error: %s\n", mysql_error(&mysql));}
的my_stpcpy ()
函数包含在示例中使用的libmysqlclient
图书馆和作品strcpy ()
但是返回指向第一个形参的终止空值的指针。