MySQL文档中说应该使用\'
。然而,scite和mysql都显示''
可行。我尝试了一下,它也可以工作。我该怎么办?
你引用的MySQL文档实际上比你提到的内容多一些。它还说:
在用“
'
”引用的字符串中,“'
”可以写成“''
”。
(此外,你链接到的是MySQL 5.0版本的表格8.1 特殊字符转义序列, 当前版本是5.6 — 但当前的表格8.1 特殊字符转义序列看起来相似。)
我认为Postgres关于backslash_quote (string)
参数的注释很有启发性:
\'
表示。表示引号的首选SQL标准方式是将其加倍(''
),但PostgreSQL历史上也接受\'
。然而,使用\'
会产生安全风险...标准的SQL使用双引号;MySQL必须接受这一点才能合理地遵守标准。
'He said, "Don''t!"'
'
”引用的字符串中的“'
”可以写成“''
”。"
”引用的字符串中的“"
”可以写成“""
”。\
”)。我认为user2087510的意思是:
name = 'something'
name = name.replace("'", "\\'")
我也成功地使用过这个。
我知道有三种方法。第一种不是最好的,第二种是大多数编程语言中常用的方法:
'I mustn''t sin!'
'
之前使用转义字符\
:'I mustn\'t sin!'
"I mustn't sin!"
\'
,因为它被许多编程语言所支持,但是 ''
被更多的 SQL 方言所支持,所以使用选项1更好以确保兼容性。例如,Sqlite 不支持反斜杠转义。 - okdewit在'
的位置上,只需写入''
。也就是说,需要写入两个'
。
这里有一个例子:
SELECT * FROM pubs WHERE name LIKE "%John's%"
只需使用双引号来包含单引号。
如果您坚持使用单引号(并需要转义字符):
SELECT * FROM pubs WHERE name LIKE '%John\'s%'
$input_str = "Here's a string with some apostrophes (')";
// sanitise it before writing to the DB (assumes PDO)
$sql = "INSERT INTO `table` (`note`) VALUES (:note)";
try {
$stmt = $dbh->prepare($sql);
$stmt->bindParam(':note', $input_str, PDO::PARAM_STR);
$stmt->execute();
} catch (PDOException $e) {
return $dbh->errorInfo();
}
return "success";
'
。正如注释所示,这不应作为适当的净化替代品使用,如所示例子。替换字符串
value = value.replace(/'/g, "\\'");
value是你要存储在数据库中的字符串。
此外,
这个功能可以在NPM包中找到,你可以查看一下。
我认为如果你有任何带撇号的数据点,你可以在撇号前面再加一个撇号。
例如:'This is John's place'
在这里,MYSQL会将其视为两个句子 'This is John' 's place'
你可以写成 'This is John''s place'。我认为这样应该可以正常工作。
''
还是\'
正确的用法? - Raptor\'
是MySQL特有的,而''
则符合ANSI SQL标准。 - apokryfos