Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何逃离';(撇号)在mysql中?_Mysql_Xml_Escaping - Fatal编程技术网

如何逃离';(撇号)在mysql中?

如何逃离';(撇号)在mysql中?,mysql,xml,escaping,Mysql,Xml,Escaping,当我从Xml中读取一些文本并将其放入数据库时,如果文本包含“(撇号),则会出现错误。如何在插入数据库时克服此问题 我不知道您在导入时使用的语言或方法。通常是反斜杠字符\。因此,您需要将“s”替换为\。有意义吗?您应该始终使用任何特定于语言的方法来避免输入数据。对于MySQL,转义字符是\。另一种选择是使用带有参数化输入的准备语句。这样就无需避开单撇号 我的猜测是,您在做事的方式中也存在一个重要的SQL注入漏洞。如果您甚至没有转义输入值或使用参数化的预处理语句,那么很容易将恶意代码注入XML。如果

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

我不知道您在导入时使用的语言或方法。通常是反斜杠字符\。因此,您需要将“s”替换为\。有意义吗?

您应该始终使用任何特定于语言的方法来避免输入数据。对于MySQL,转义字符是
\
。另一种选择是使用带有参数化输入的准备语句。这样就无需避开单撇号


我的猜测是,您在做事的方式中也存在一个重要的SQL注入漏洞。如果您甚至没有转义输入值或使用参数化的预处理语句,那么很容易将恶意代码注入XML。

如果撇号前面加了\(反斜杠)。使用文本编辑器查找并替换
'
\'
的所有内容应该可以工作。小心不要弄乱XML结构

约翰的

需要

约翰的

您还可以使用PHP或C#为您转义它。 以下是MySQL参考中的。

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

带“.”的字符串中的“.”可以写为““””

带“”的字符串中的“”可以写为“”

在引号字符前面加一个转义字符(\)

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

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

虽然上面提到了主要问题,但请查找每种语言/适配器的正确方法。占位符消除了引用的需要(这可以防止由自定义逻辑引入的错误),并防止了许多恶意SQL注入的情况



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

如果我使用预先准备好的语句,我不需要修改我的xml以替换为/'s right?@Naveen,如果使用参数化输入,这是正确的。如果您只是使用查询中包含的输入执行一个普通的SQL查询,并尝试准备/执行它,它仍然会失败。它是否取决于数据库中的数据类型?我在用长文,对不起!我测试了一个错误的文件。它正在工作。谢谢lot@Naveen很抱歉,昨天错过了您的后续评论。只要您实际使用的是参数化的预处理语句,您就不需要在不更改XML的情况下转义撇号。单独在Java中如何实现这一点?使用预处理语句:)不要转义-除非使用原始SQL进行手动处理。(适应语言)。另外,请参阅官方MySQL参考。使用您正在使用的编程语言的官方转义机制。不要用手逃逸,因为还有其他角色也需要逃逸,而用手做这样的事情几乎总是有漏洞,会让你很脆弱。简单!!使用事先准备好的语句。
'foo''bar'
'foo\'bar'
"foo'bar"