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

标签 mysql special-characters

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

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

是否有任何范围可以转义所有特殊字符?

请帮忙。

最佳答案

不,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 连接器公开了相同的功能。

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

INSERT INTO tablename VALUES ( ? )

关于mysql - 是否有任何范围可以转义 mysql 查询中的所有特殊字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30575905/

相关文章:

MySQL 检查行是否包含来自另一个表的值

mysql - 无法比较日期

php - 带有命令行参数的 C 控制台应用程序中的井号 (#)

javascript - 修改当前的正则表达式以允许特殊字符

ruby Dir.entries 不识别特殊字符

java - opentsdb 是否接受特殊字符,如度数符号 (°)、% 或 ²

java - 如何在 Spring Boot 1.4.1 中为 @DataJpaTest 添加 mode=mysql 到嵌入式 H2 DB?

MySQL 查询获取最近 12 个月的销售额,其中月份和年份是不同的字段

mysql - MySQL 中意外的 NOT EQUAL TO NULL 比较

sql - OpenCSVSerde escapeChar 覆盖 quoteChar