繁体   English   中英

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

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

MySQL 文档说它应该是\\' 但是,scite 和 mysql 都表明''有效。 我看到了,它的工作原理。 我应该怎么办?

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

A“ ' ”加引号的字符串里面的“ ' ”可以写成‘ '' ’。

(此外,您链接到MySQL 5.0 版本的 Table 8.1. Special Character Escape Sequences ,当前版本是 5.6 — 但当前的Table 8.1. Special Character Escape Sequences看起来非常相似。)

我认为关于backslash_quote (string)参数Postgres 注释是有用的:

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

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

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

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

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

我相信 user2087510 的意思是:

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

我也成功地使用了它。

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

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

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

下面是一个例子:

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

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

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

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

替换字符串

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

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

更多,

用于此的 NPM 包,您可以查看它

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

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

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

这里 MYSQL 假设两个句子 'This is John''s place'

你可以输入“这是约翰的地方”。 我认为它应该这样工作。

可能偏离主题,但也许您来到这里是为了寻找一种方法来清理从 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()函数,可将它们转换为' . 正如评论所示,根据给出的示例,这不应用作适当消毒的替代品。

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

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

这个工作了:

name = 'John O'Brien'
name = name.replace("\'", "\\\'")

暂无
暂无

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

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