如何在mysql中逃避'​​(撇号)?

时间:2013-05-21 17:17:06

标签: mysql xml escaping

当我从Xml读取一些文本并将其放入数据库时​​,如果文本包含'(撇号),则会出现错误。我在插入数据库时​​如何克服这个问题。

4 个答案:

答案 0 :(得分:2)

撇号在哪里添加\(反斜杠)。使用文本编辑器查找并替换'\'的全部内容应该有效。小心不要弄乱XML结构。

离。

  

John的

需要

  

约翰\的

您也可以使用PHP或C#来逃避它。 这是PHP function

答案 1 :(得分:1)

您应该始终使用您所使用的任何语言特定方法来逃避输入数据。对于MySQL,转义字符为\。另一种方法是使用带参数化输入的预处理语句。这将消除逃避单撇号的需要。

我的猜测是,您在执行操作方面也存在严重的SQL注入漏洞。如果您甚至没有转义输入值或使用参数化预准备语句,那么可以轻松地将恶意代码注入XML中。

答案 2 :(得分:0)

我不知道您导入的语言或方法是什么。通常它是反斜杠字符\。所以你需要将's替换为'。有意义吗?

答案 3 :(得分:0)

来自MySQL参考中的9.1.1 String Literals

  

有几种方法可以在字符串中包含引号字符:

     

引用“'”的字符串中的“'”可写为“''”。

     

引用“”“的字符串中的”“”可写为“”“”。

     

通过转义字符(“\”)来引用引号字符。

     

引用“”“的字符串中的”'“不需要特殊处理,也不需要加倍或转义。同样,”“中引用”'“的字符串内部不需要特殊处理。

因此,给定的字符串foo'bar可以用MySQL 1 编写:

'foo''bar'
'foo\'bar'
"foo'bar"

虽然以上解决了主要问题,use placeholders (aka prepared statements) - 查找每种语言/适配器的正确方法。占位符消除了引用的需要(这可以防止自定义逻辑引入的错误)​​可以防止许多恶意SQL注入的情况。


1 MySQL选择的语法与其他常见的SQL实现不同;这种语法不是通用的。