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

问题描述 投票:0回答:11

MySQL 文档说它应该是

\'
。然而,scite 和 mysql 都显示
''
有效。我看到了,它有效。我该怎么办?

mysql escaping
11个回答
249
投票

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

用“

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

(另外,您链接到表 8.1 的 MySQL 5.0 版本。特殊字符转义序列,当前版本是 5.6 — 但当前的 表 8.1。特殊字符转义序列看起来非常相似。)

我认为 Postgres 关于

backslash_quote (string)
参数 的注释提供了丰富的信息:

这控制引号是否可以在字符串文字中用

\'
表示。表示引号的首选 SQL 标准方法是将其加倍 (
''
),但 PostgreSQL 历史上也接受
\'
。然而,使用
\'
会带来安全风险...

这对我来说,使用双单引号字符是比使用反斜杠转义单引号更好的整体和长期选择。

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


56
投票

标准 SQL 使用双引号; MySQL 必须接受这一点才能合理合规。

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

15
投票

我认为 user2087510 的意思是:

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

我也用过这个,成功了。


10
投票

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

  1. 使用另一个单引号:
    'I mustn''t sin!'
  2. 在单引号前使用转义字符
    \
    '
    'I mustn\'t sin!'
  3. 使用双引号代替单引号将字符串括起来:
    "I mustn't sin!"

7
投票

只需写

''
代替
'
我的意思是两次
'


6
投票

这是一个例子:

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

只需使用双引号将单引号括起来即可。

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

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

1
投票

可能偏离主题,但也许您来这里是为了寻找一种方法来清理 HTML 表单中的文本输入,以便当用户输入撇号字符时,当您尝试将文本写入到数据库中基于 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 具有 htmlspecialchars() 函数,可以将它们转换为

'
。正如评论所示,根据给出的示例,这不应用作适当消毒的替代品。


0
投票

更换琴弦

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

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

此外,

NPM 包,你可以看看它

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


0
投票

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

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

这里 MYSQL 假设有两句话“This is John''s place”

您可以输入“这是约翰的地方”。我想应该是这样的。


0
投票

将撇号替换为 ' 可以解决您的问题。它对我有用

datavalue= json.loads(json.dumps(data).replace("'","'"))


-2
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.