我有一组带有randoms数据的查询,我想在数据库中插入。 Randoms数据可能包含任何特殊字符。 例如:
INSERT INTO tablename VALUES('!^'"twco\dq');
是否有任何范围可以逃避所有特殊字符?
请帮忙。
答案 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 ( ? )