是否有任何范围可以逃避mysql查询中的所有特殊字符?

时间:2015-06-01 14:16:59

标签: mysql special-characters

我有一组带有randoms数据的查询,我想在数据库中插入。 Randoms数据可能包含任何特殊字符。 例如:

INSERT INTO tablename VALUES('!^'"twco\dq');

是否有任何范围可以逃避所有特殊字符?

请帮忙。

2 个答案:

答案 0 :(得分:0)

您可以使用\字符来转义下面的特殊字符。如果有疑问,请参阅此DEMO

INSERT INTO tablename VALUES('\!\^\'\"twco\\dq');

Per MySQL文档,下面是已定义的转义序列

Table 9.1 Special Character Escape Sequences

\0  An ASCII NUL (0x00) character.
\'  A single quote (“'”) character.
\"  A double quote (“"”) character.
\b  A backspace character.
\n  A newline (linefeed) character.
\r  A carriage return character.
\t  A tab character.
\Z  ASCII 26 (Control+Z). See note following the table.
\\  A backslash (“\”) character.
\%  A “%” character. See note following the table.
\_  A “_” character. See note following the table.

答案 1 :(得分:0)

不,MySQL中没有“范围”可以自动转义所有特殊字符。

如果您的文本文件包含使用可能不安全的“随机值”创建的语句,请执行以下操作:

INSERT INTO tablename VALUES('!^'"twco\dq');
                              ^^^^^^^^^^^ 
你基本上搞砸了。 MySQL无法解读乱蛋。没有“模式”使MySQL能够使用这样的语句。

幸运的是,该特定语句将引发错误。更悲惨的是一些邪恶的随机数据,

x'); DROP TABLE students; --

如果该随机字符串已合并到您的SQL文本中而未进行转义,则结果为:

INSERT INTO tablename VALUES('x'); DROP TABLE students; --');

特殊字符的转义必须在之前完成将值合并到SQL文本中。

您需要获取随机字符串值:

!^'"twco\dq

并通过一个函数运行它,该函数执行必要的转义以使该值安全,并将其作为SQL语句的一部分包含在内。

MySQL提供real_escape_string_function作为其C库的一部分。参考https://dev.mysql.com/doc/refman/5.5/en/mysql-real-escape-string.html。通过MySQL连接器可以使用多种语言显示相同的功能。

“转义”的更好模式是使用预备语句绑定占位符,因此您的语句将是静态文字,如下所示:

INSERT INTO tablename VALUES ( ? )