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

时间:2012-03-07 06:09:41

标签: mysql escaping

MySQL documentation表示它应为\'。但是,scite和mysql都显示''有效。我看到了它,它的工作原理。我该怎么办?

11 个答案:

答案 0 :(得分:158)

你引用的MySQL文档实际上比你提到的要多一点。它还说,

  

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

(另外,您链接到MySQL 5.0 version of Table 8.1. Special Character Escape Sequences,当前版本为5.6 - 但当前Table 8.1. Special Character Escape Sequences看起来非常相似。)

我认为Postgres note on the backslash_quote (string) parameter提供了丰富的信息:

  

它控制是否可以在字符串文字中用\'表示引号。表示引号的首选SQL标准方法是将其加倍(''),但PostgreSQL历来也接受\'。但是,使用\'会产生安全风险......

对我来说,使用加倍的单引号字符比使用反斜杠来逃避单引号更好的整体和长期选择。

现在,如果您还想添加语言选择,SQL数据库选择及其非标准怪癖,以及选择查询框架,那么您最终可能会有不同的选择。您没有提供有关约束的更多信息。

答案 1 :(得分:32)

标准SQL使用双引号; MySQL必须接受合理的合规性。

'He said, "Don''t!"'

答案 2 :(得分:7)

我认为user2087510的意思是:

name = 'something'
name = name.replace("'", "\\'")

我也成功地使用了它。

答案 3 :(得分:6)

只需写''代替'我的意思是两次'

答案 4 :(得分:3)

以下是一个例子:

SELECT * FROM pubs WHERE name LIKE "%John's%"

只需使用双引号括起单引号。

如果你坚持使用单引号(并且需要转义字符):

SELECT * FROM pubs WHERE name LIKE '%John\'s%'

答案 5 :(得分:3)

我知道有三种方法。第一个不是最漂亮的,第二个是大多数编程语言中常见的方式:

  1. 使用另一个单引号:'I mustn''t sin!'
  2. 在单引号\之前使用转义字符''I mustn\'t sin!'
  3. 使用双引号括起字符串而不是单引号:"I mustn't sin!"

答案 6 :(得分:0)

我认为如果你有任何带撇号的数据点,你可以在撇号之前添加一个撇号

例如。 “这是约翰的地方”

这里MYSQL假设两个句子'这是约翰'的地方'

你可以把'这是约翰'的地方'。我认为应该这样做。

答案 7 :(得分:0)

在PHP中,我喜欢使用mysqli_real_escape_string()来转义字符串中的特殊字符以供SQL语句使用。

请参阅https://www.php.net/manual/en/mysqli.real-escape-string.php

答案 8 :(得分:0)

可能是题外话,但也许您是来这里寻找一种方法来清理从HTML表单输入的文本,以便当用户输入撇号字符时,在您尝试编写文本时不会引发错误到数据库中基于SQL的表。有两种方法可以执行此操作,您可能还想阅读有关SQL注入的信息,但是PHP中的一个简单选择是使用htmlspecialchars()函数,该函数会将所有撇号转换为'反正可能就是您要存储的内容。

答案 9 :(得分:-1)

替换字符串

value = value.replace(/'/g, "\\'");

其中value是将存储在数据库中的字符串。

  

此外,

     

NPM包,你可以查看它

https://www.npmjs.com/package/mysql-apostrophe

答案 10 :(得分:-5)

这个有用:

name = 'John O'Brien'
name = name.replace("\'", "\\\'")
相关问题