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 ( ? )
我有一组查询,其中包含要插入数据库的随机数据。随机数据可能有任何特殊字符。 例如:
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 ( ? )