如何在MySQL中插入由单引号或双引号组成的值。即
This is Ashok's Pen.
单引号会产生问题。可能还有其他转义字符。
如何正确插入数据?
答案 0 :(得分:104)
简单地说:
SELECT 'This is Ashok''s Pen.';
因此在字符串中,用两个单引号替换每个单引号。
或者:
SELECT 'This is Ashok\'s Pen.'
逃脱它=)
答案 1 :(得分:9)
请参阅我对"How to escape characters in MySQL"
的回答您使用与MySQL交谈的任何库都将具有内置的转义功能,例如在PHP中,您可以使用mysqli_real_escape_string或PDO::quote
答案 2 :(得分:8)
'是转义字符。所以你的字符串应该是: 这是阿肖克的笔
编辑:
如果您使用的是某些前端代码,则需要在将数据发送到SP之前进行字符串替换。
例如。在C#中你可以做到
value = value.Replace("'","''");
然后将值传递给SP。
答案 3 :(得分: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();
答案 4 :(得分:6)
使用此代码:
<?php $var = "This is Ashok's Pen.";
mysql_real_escape_string($var);?>
这将解决您的问题,因为数据库无法检测字符串的特殊字符。
答案 5 :(得分:6)
这是一个非常古老的问题,但根据您的观点,还有另一种方法可以做到或许不安全。由于使用了特定的字符串函数,它需要MySQL 5.6或更高版本:FROM_BASE64
。
让我们说你有这个消息,你想插入:
&#34;啊,&#34;几乎无头的尼克挥手优雅的手,&#34;这个问题并不重要。 。 。 。这并不像我真的想加入。 。 。 。以为我申请了,但显然我并没有满足要求&#39; - &#34;
这句话有一堆单引号和双引号,插入MySQL真的很痛苦。如果你从一个程序插入它,它很容易逃脱引号等。但是,如果你必须将它放入SQL脚本,你必须编辑文本(以逃避引号)这可能容易出错或对包装等敏感。
相反,您可以对文本进行base64编码,因此您可以使用&#34; clean&#34;字符串:
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
'));
这将插入而不会有任何投诉,并且您不必手动转义字符串中的任何文本。
答案 6 :(得分:5)
您应该使用\
字符转义特殊字符。
This is Ashok's Pen.
变为:
This is Ashok\'s Pen.
答案 7 :(得分:3)
您可以使用此代码
<?php
$var = "This is Ashok's Pen.";
addslashes($var);?>
如果mysqli_real_escape_string不起作用
答案 8 :(得分:3)
如果您想在数据库中保留(&#39;)撇号,请使用以下代码
$new_value = str_replace("'","\'", $value);
$ new_value可以存储在数据库中。
答案 9 :(得分:2)
在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);
?>
答案 10 :(得分:1)
如果您使用的是php,请使用addslashes()函数
答案 11 :(得分:1)
for index, elem in enumerate(df['ad_requests']):
if pd.isnull(elem):
df.at[index,'ad_requests']=df.at[index-1,'ad_requests']-df.at[index-1,'impressions']
答案 12 :(得分:0)
对于程序化访问,您可以使用placeholders为您自动转义不安全的字符。
例如,在Perl DBI中,您可以使用:
my $string = "This is Ashok's pen";
$dbh->do("insert into my_table(my_string) values(?)",undef,($string));
答案 13 :(得分:0)
也许你可以看看Mysql手册中的函数Quote。
http://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_quote
答案 14 :(得分:0)
我的方式,使用Delphi:
TheString to“escape”:
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中插入或更新文本字段而没有任何问题。
所有编程语言都有类似的功能!
答案 15 :(得分:0)
使用addlahes(), 或mysql_real_escape_string
答案 16 :(得分:0)
这是我的数据作为 API 响应的样子,我想将其存储在 MYSQL 数据库中。它包含引号、HTML 代码等。
示例:-
{
rewardName: "Cabela's eGiftCard $25.00",
shortDescription: '<p>adidas gift cards can be redeemed in over 150 adidas Sport Performance, adidas Originals, or adidas Outlet stores in the US, as well as online at <a href="http://adidas.com/">adidas.com</a>.</p>
terms: '<p>adidas Gift Cards may be redeemed for merchandise on <a href="http://adidas.com/">adidas.com</a> and in adidas Sport Performance, adidas Originals, and adidas Outlet stores in the United States.'
}
解决方案
CREATE TABLE `brand` (
`reward_name` varchar(2048),
`short_description` varchar(2048),
`terms` varchar(2048),
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1;
插入时,接着JSON.stringify()
let brandDetails= {
rewardName: JSON.stringify(obj.rewardName),
shortDescription: JSON.stringify(obj.shortDescription),
term: JSON.stringify(obj.term),
}
上面是JSON对象,下面是向MySQL插入数据的SQL查询。
let query = `INSERT INTO brand (reward_name, short_description, terms)
VALUES (${brandDetails.rewardName},
(${brandDetails.shortDescription}, ${brandDetails.terms})`;
它的工作....
如果没有任何效果,试试这个:
var res = str.replace(/'/g, "\\'");
var res = res.replace(/"/g, "\\\"");
它将 \ 转义字符添加到 all(every) 出现的 ' 和 "
不确定它是否是解决问题的正确/专业方法
我猜它会起作用,但在实际内容中,每个单引号和双引号都将替换为 \ 字符