当我从 Xml 读取一些文本并将其放入数据库时,如果文本包含 '(撇号) ,我会收到错误消息。当我插入数据库时如何克服这个问题。
4 回答
在撇号之前添加一个\(反斜杠)的地方。使用您的文本编辑器进行查找并替换所有 for '
to\'
应该可以工作。小心不要弄乱 XML 结构。
前任。
约翰的
需要是
约翰的
您也可以使用 PHP 或 C# 为您转义它。这是PHP 函数。
您应该始终使用任何特定于语言的方法来转义输入数据。对于 MySQL,转义字符是\
. 另一种选择是使用带有参数化输入的准备好的语句。这将消除转义单个撇号的需要。
我的猜测是,你做事的方式也有一个严重的 SQL 注入漏洞。如果您甚至没有转义您的输入值或使用参数化的预处理语句,那么很容易将恶意代码注入 XML。
我不知道您使用什么语言或方法进行导入。通常它是反斜杠字符 \ 。所以你需要用\'替换's。有道理?
从MySQL 参考中的9.1.1 字符串文字:
有几种方法可以在字符串中包含引号字符:
用“'”引用的字符串中的“'”可以写成“''”。
一个“” 在用“&”引用的字符串内 可以写成“”“”。
在引号字符前加上转义字符 (“\”)。
用“&”引用的字符串中的“'” 不需要特殊处理,也不需要加倍或转义。同理,“” 在用“'”引用的字符串内不需要特殊处理。
因此,给定的字符串foo'bar
可以写在 MySQL 1中:
'foo''bar'
'foo\'bar'
"foo'bar"
虽然以上解决了主要问题,但请使用占位符(也就是准备好的语句) - 查找每种语言/适配器的正确方法。占位符消除了引用的需要(这可以防止自定义逻辑引入的错误)并防止许多恶意 SQL 注入的情况。
1 MySQL选择的语法不同于其他常见的SQL实现;这种语法不是通用的。