mysql 查询中是否有转义所有特殊字符的范围?

Are there any scope that escape all special characters in mysql query?

我有一组查询,其中包含要插入数据库的随机数据。随机数据可能有任何特殊字符。 例如:

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

是否有转义所有特殊字符的作用域?

请帮忙。

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

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

根据 MySQL 文档,下面是定义的转义序列

Table 9.1 Special Character Escape Sequences

[=11=]  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.

没有,MySQL中没有"scope"自动转义所有特殊字符

如果您的文本文件包含使用潜在不安全 "random values" 创建的语句,如下所示:

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

你基本上完蛋了。 MySQL 无法解读炒鸡蛋。没有 "mode" 可以使 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 多种语言的连接器公开了相同的功能。

"escaping" 的一个更好的模式是使用 准备好的语句 绑定占位符 ,所以你的语句将是静态文字,像这样:

INSERT INTO tablename VALUES ( ? )