繁体   English   中英

如何在MySQL中转义'(撇号)?

[英]How to escape ' (apostrophe) in mysql?

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

撇号在前面加一个\\(反斜杠)的地方。 使用您的文本编辑器进行查找并将所有替换为' to \\'应该可以。 请注意不要弄乱XML结构。

例如

约翰的

需要是

约翰的

您也可以使用PHP或C#为您进行转义。 这是PHP函数

您应该始终使用任何特定于语言的方法来对输入数据进行转义。 对于MySQL,转义字符为\\ 另一种选择是使用带有参数化输入的准备好的语句。 这将消除对单个撇号进行转义的需要。

我的猜测是您在做事的方式上也有一个重大的SQL注入漏洞。 如果您甚至没有逃避输入值或使用参数化的准备好的语句,那么您可以轻松地将恶意代码注入XML。

我不知道您要使用哪种语言或方法进行导入。 通常是反斜杠字符\\。 因此,您需要用\\替换'。 说得通?

从MySQL参考中的9.1.1字符串文字开始

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

引号中带有“'”的字符串中的“'”可以写为“''”。

引号中带有“”的字符串中的“”可以写为“””。

在引号字符前加转义字符(“ \\”)。

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

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

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

尽管以上内容解决了主要问题,但请使用占位符(也称为准备好的语句) -根据每种语言/适配器查找正确的方法。 占位符消除了引用的需要(这防止了自定义逻辑引入的错误)​​, 防止了许多恶意SQL注入的情况。


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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM