如何在MySQL中转义单引号

Ash*_*pta 92 mysql string quotes

如何在MySQL中插入由单引号或双引号组成的值.即

This is Ashok's Pen.
Run Code Online (Sandbox Code Playgroud)

单引号会产生问题.可能还有其他转义字符.

如何正确插入数据?

Rob*_*Rob 115

简单地说:

SELECT 'This is Ashok''s Pen.';

所以在字符串中,用两个单引号替换每个单引号.

要么:

SELECT 'This is Ashok\'s Pen.'

逃避=)

  • 您可能希望更新您的帖子以包含mysql_real_escape_string()或addslashes()作为可能的解决方案......如下面的评论之一,OP声明他们只是从文件读取和插入. (8认同)
  • 不推荐将mysql_*方法用于将来使用,因为它已被弃用(https://wiki.php.net/rfc/mysql_deprecation). (3认同)

Ras*_*dit 9

'是逃脱角色.所以你的字符串应该是:这是阿肖克的笔

编辑:

如果您使用的是某些前端代码,则需要在将数据发送到SP之前进行字符串替换.

例如.在C#你可以做到

value = value.Replace("'", "''");
Run Code Online (Sandbox Code Playgroud)

然后将值传递给SP.

  • FWIW 小尼特:*反斜杠*是“转义字符”;`''`(两个单引号)是允许“转义”单引号字符的特殊替代方案。 (2认同)

Pau*_*xon 9

请参阅我对"如何在MySQL中转义字符"的回答

无论你使用哪种库与MySQL交谈都会内置一个转义函数,例如在PHP中你可以使用mysqli_real_escape_stringPDO :: quote


hd1*_*hd1 7

如果您使用预准备语句,驱动程序将处理任何转义.例如(Java):

Connection conn = DriverManager.getConnection(driverUrl);
conn.setAutoCommit(false);
PreparedStatement prepped = conn.prepareStatement("INSERT INTO tbl(fileinfo) VALUES(?)");
String line = null;
while ((line = br.readLine()) != null) {
    prepped.setString(1, line);
    prepped.executeQuery();
}
conn.commit();
conn.close();
Run Code Online (Sandbox Code Playgroud)


小智 7

使用此代码:

<?php
    $var = "This is Ashok's Pen.";

    mysql_real_escape_string($var);
?>
Run Code Online (Sandbox Code Playgroud)

这将解决您的问题导致数据库无法检测到字符串的特殊字符.


Chr*_*ltz 6

这是一个非常古老的问题,但根据您的观点,还有另一种方法可以做到这一点,这可能会也可能不会更安全.由于使用了特定的字符串函数,它需要MySQL 5.6或更高版本:FROM_BASE64.

假设您要插入此消息:

"啊,"几乎无头的尼克挥了挥手,"这不重要......不是我真的想加入......我想我会申请,但显然我不符合要求' - "

这句话有一堆单引号和双引号,插入MySQL真的很痛苦.如果你从一个程序插入它,很容易逃脱引号等.但是,如果你必须将它放入一个SQL脚本,你将不得不编辑可能容易出错的文本(以逃避引号)或对包装等敏感

相反,您可以对文本进行base64编码,因此您有一个"干净"的字符串:

base64

关于base64编码的一些注意事项:

  1. base64-encoding是一种二进制编码,所以你最好确保在编码时让你的字符集正确,因为MySQL会将base64编码的字符串解码成字节然后解释它们.确保FROM_BASE64和MySQL就字符编码是什么达成一致(我建议使用UTF-8).
  2. 为了便于阅读,我将字符串包装到了50列.您可以将它包装到您想要的任意数量的列(或根本不包装),它仍然可以工作.

现在,将其加载到MySQL:

base64

这将插入没有任何投诉,您不必手动转义字符串内的任何文本.


sim*_*622 5

您应该使用该\字符转义特殊字符.

This is Ashok's Pen.
Run Code Online (Sandbox Code Playgroud)

变为:

This is Ashok\'s Pen.
Run Code Online (Sandbox Code Playgroud)


Dhe*_*ngh 5

如果您想(')在数据库中保留撇号,请使用以下代码:

$new_value = str_replace("'","\'", $value); 
Run Code Online (Sandbox Code Playgroud)

$new_value可以存储在数据库中。