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.'
逃避=)
'是逃脱角色.所以你的字符串应该是:这是阿肖克的笔
编辑:
如果您使用的是某些前端代码,则需要在将数据发送到SP之前进行字符串替换.
例如.在C#你可以做到
value = value.Replace("'", "''");
Run Code Online (Sandbox Code Playgroud)
然后将值传递给SP.
请参阅我对"如何在MySQL中转义字符"的回答
无论你使用哪种库与MySQL交谈都会内置一个转义函数,例如在PHP中你可以使用mysqli_real_escape_string或PDO :: quote
如果您使用预准备语句,驱动程序将处理任何转义.例如(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)
这将解决您的问题导致数据库无法检测到字符串的特殊字符.
这是一个非常古老的问题,但根据您的观点,还有另一种方法可以做到这一点,这可能会也可能不会更安全.由于使用了特定的字符串函数,它需要MySQL 5.6或更高版本:FROM_BASE64.
假设您要插入此消息:
"啊,"几乎无头的尼克挥了挥手,"这不重要......不是我真的想加入......我想我会申请,但显然我不符合要求' - "
这句话有一堆单引号和双引号,插入MySQL真的很痛苦.如果你从一个程序插入它,很容易逃脱引号等.但是,如果你必须将它放入一个SQL脚本,你将不得不编辑可能容易出错的文本(以逃避引号)或对包装等敏感
相反,您可以对文本进行base64编码,因此您有一个"干净"的字符串:
base64
关于base64编码的一些注意事项:
FROM_BASE64和MySQL就字符编码是什么达成一致(我建议使用UTF-8).现在,将其加载到MySQL:
base64
这将插入没有任何投诉,您不必手动转义字符串内的任何文本.
您应该使用该\字符转义特殊字符.
This is Ashok's Pen.
Run Code Online (Sandbox Code Playgroud)
变为:
This is Ashok\'s Pen.
Run Code Online (Sandbox Code Playgroud)
如果您想(')在数据库中保留撇号,请使用以下代码:
$new_value = str_replace("'","\'", $value);
Run Code Online (Sandbox Code Playgroud)
$new_value可以存储在数据库中。