MySQL 文档说应该是 \'。然而,scite 和 mysql 都显示 ''也可以工作。我看到它生效了。我该怎么选?
\'
''
标准 SQL 使用双引号; MySQL 必须接受双引号才能达到合理的兼容性。
'He said, "Don''t!"'
这里有一个例子:
SELECT * FROM pubs WHERE name LIKE "%John's%"
只要使用双引号来包括单引号。
如果你坚持使用单引号(以及需要转义字符) :
SELECT * FROM pubs WHERE name LIKE '%John\'s%'
你引用的 MySQL 文档实际上说的比你提到的多一点,它还说,
引用“ '”的字符串中的“ '”可以写成“ ''”。
'
(另外,您链接到了 MySQL 5.0版本的表8.1. < em > 特殊字符转义序列 ,当前版本是5.6ーー但是当前的 表8.1. < em > 特殊字符转义序列 看起来非常相似。)
我认为 关于 backslash_quote (string)参数的 Postgres 注释提供了很多信息:
backslash_quote (string)
这控制引号是否可以用字符串文字中的 \'表示。表示引号的首选 SQL 标准方法是将其加倍('') ,但 PostgreSQL 在历史上也接受 \'。然而,使用 \'会带来安全风险..。
这说明使用双引号的单引号字符比使用反斜杠转义单引号要好得多。
现在,如果您还想添加语言的选择、 SQL 数据库的选择及其非标准特性,以及查询框架的选择,那么您最终可能会有不同的选择。您没有提供关于约束的太多信息。
我相信 user2087510的意思是:
name = 'something' name = name.replace("'", "\\'")
我也成功地利用了这一点。
只要写 ''代替 '我的意思是两次 '
我知道有三种方式。前者不是最漂亮的,后者是大多数编程语言中的常见方式:
'I mustn''t sin!'
'I mustn\'t sin!'
\
"I mustn't sin!"
把绳子换掉
value = value.replace(/'/g, "\\'");
其中 value 是要存储在数据库中的字符串。
此外, 这个 NPM 包,您可以查看它
此外,
这个 NPM 包,您可以查看它
Https://www.npmjs.com/package/mysql-apostrophe
我认为如果你有任何数据点与撇号,你可以添加一个撇号之前的撇号
这是约翰的地方
这里 MYSQL 假设有两句话‘这是约翰的地方’
你可以写“这是约翰的地方”,我认为应该这样写。
在 PHP 中,我喜欢使用 mysqli _ real _ escape _ string () ,它转义字符串中的特殊字符,用于 SQL 语句。
见 https://www.php.net/manual/en/mysqli.real-escape-string.php
可能是跑题了,但也许您来这里是为了找到一种方法来清除 HTML 表单中的文本输入,这样当用户输入撇号字符时,当您试图将文本写入 DB 中基于 SQL 的表时,它就不会抛出错误。有几种方法可以做到这一点,您可能还想阅读有关 SQL 注入的内容。 下面是在 PHP 中使用预置语句和绑定参数的示例:
$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";
在特殊情况下,您可能希望使用它们的 HTML 实体引用来存储撇号,PHP 具有 Htmlspecalchars ()函数,该函数将它们转换为 '。正如评论所指出的,这不应该被用来替代适当的消毒,正如给出的例子所示。
'