Answers:
'是转义字符。因此,您的字符串应为:
这是Ashok的笔
如果使用的是前端代码,则需要在将数据发送到存储过程之前进行字符串替换。
例如,在C#中,您可以执行
value = value.Replace("'", "''");
然后将值传递给存储过程。
''
(两个单引号)是允许“转义”单引号字符的一种特殊选择。
查看我对“如何在MySQL中转义字符”的回答
无论您使用什么库与MySQL通讯,都将内置一个转义函数,例如在PHP中,您可以使用mysqli_real_escape_string或PDO :: quote
This extension was deprecated in PHP 5.5.0, and it was removed in PHP 7.0.0. Instead, the MySQLi or PDO_MySQL extension should be used.
。
如果使用准备好的语句,驱动程序将处理所有转义。例如(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();
还有另一种方法可能会更安全或更安全,具体取决于您的观点。由于使用了特定的字符串函数,因此它需要MySQL 5.6或更高版本FROM_BASE64
。
假设您有要插入的消息:
“啊,”几乎没头的尼克挥了挥优雅的手,“没关系……我似乎并不想参加……以为我会申请,但显然我没有达到要求。 '-”
该引号有很多单引号和双引号,并且插入MySQL确实很痛苦。如果要从程序中插入,很容易将引号引起来,等等。但是,如果必须将其放入SQL脚本中,则必须编辑文本(以避开引号),这很容易出错。或对自动换行等敏感
相反,您可以对文本进行Base64编码,因此您拥有一个“干净”的字符串:
SWtGb0xDSWdUbVZoY214NUlFaGxZV1JzWlhOeklFNXBZMnNnZD
JGMlpXUWdZVzRnWld4bFoyRnVkQ0JvWVc1a0xDQWlZU0J0WVhS
MFpYCklnYjJZZ2JtOGdhVzF3YjNKMFlXNWpaUzRnTGlBdUlDNG
dTWFFuY3lCdWIzUWdZWE1nZEdodmRXZG9JRWtnY21WaGJHeDVJ
SGRoYm5SbApaQ0IwYnlCcWIybHVMaUF1SUM0Z0xpQlVhRzkxWj
JoMElFa25aQ0JoY0hCc2VTd2dZblYwSUdGd2NHRnlaVzUwYkhr
Z1NTQW5aRzl1SjMKUWdablZzWm1sc2JDQnlaWEYxYVhKbGJXVn
VkSE1uSUMwaUlBPT0K
有关Base64编码的一些说明:
base64
和MySQL同意字符编码是什么(我建议使用UTF-8)。现在,将其加载到MySQL:
INSERT INTO my_table (text) VALUES (FROM_BASE64('
SWtGb0xDSWdUbVZoY214NUlFaGxZV1JzWlhOeklFNXBZMnNnZD
JGMlpXUWdZVzRnWld4bFoyRnVkQ0JvWVc1a0xDQWlZU0J0WVhS
MFpYCklnYjJZZ2JtOGdhVzF3YjNKMFlXNWpaUzRnTGlBdUlDNG
dTWFFuY3lCdWIzUWdZWE1nZEdodmRXZG9JRWtnY21WaGJHeDVJ
SGRoYm5SbApaQ0IwYnlCcWIybHVMaUF1SUM0Z0xpQlVhRzkxWj
JoMElFa25aQ0JoY0hCc2VTd2dZblYwSUdGd2NHRnlaVzUwYkhr
Z1NTQW5aRzl1SjMKUWdablZzWm1sc2JDQnlaWEYxYVhKbGJXVn
VkSE1uSUMwaUlBPT0K
'));
这将插入而不会产生任何抱怨,并且您不必手动转义字符串中的任何文本。
在PHP中,使用mysqli_real_escape_string。
PHP手册中的示例:
<?php
$link = mysqli_connect("localhost", "my_user", "my_password", "world");
/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
mysqli_query($link, "CREATE TEMPORARY TABLE myCity LIKE City");
$city = "'s Hertogenbosch";
/* this query will fail, cause we didn't escape $city */
if (!mysqli_query($link, "INSERT into myCity (Name) VALUES ('$city')")) {
printf("Error: %s\n", mysqli_sqlstate($link));
}
$city = mysqli_real_escape_string($link, $city);
/* this query with escaped $city will work */
if (mysqli_query($link, "INSERT into myCity (Name) VALUES ('$city')")) {
printf("%d Row inserted.\n", mysqli_affected_rows($link));
}
mysqli_close($link);
?>
$var = mysqli_real_escape_string($conn, $_POST['varfield']);
使用addslahes()或mysql_real_escape_string()。
This, mysql_real_escape_string() extension was deprecated in PHP 5.5.0, and it was removed in PHP 7.0.0. Instead, the MySQLi or PDO_MySQL extension should be used.
。
我做的方式,通过使用Delphi:
TheString“转义”:
TheString=" bla bla bla 'em some more apo:S 'em and so on ";
解:
StringReplace(TheString, #39,'\'+#39, [rfReplaceAll, rfIgnoreCase]);
结果:
TheString=" bla bla bla \'em some more apo:S \'em and so on ";
该函数将所有Char(39)替换为“ \'”,从而使您可以毫无问题地在MySQL中插入或更新文本字段。
在所有编程语言中都可以找到类似的功能!