我有一组要插入数据库的随机数据查询。随机数据可能有任何特殊字符。 例如:
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/