[英]How to escape apostrophe (') in 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("'", "\\'")
我也成功地使用了它。
我知道有三种方式。 第一个不是最漂亮的,第二个是大多数编程语言中的常用方法:
'I mustn''t sin!'
'
: 'I mustn\\'t sin!'
之前使用转义字符\\
"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 包,您可以查看它
我认为如果您有任何带撇号的数据点,您可以在撇号前添加一个撇号
例如。 “这是约翰的地方”
这里 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.