【发布时间】:2011-10-08 09:25:12
【问题描述】:
我试图通过查询将字符串作为“婴儿的世界”插入到 varchar 类型的列中,但显示错误。 我还需要在查询中添加什么以使其接受该符号
【问题讨论】:
标签: c# mysql visual-studio
我试图通过查询将字符串作为“婴儿的世界”插入到 varchar 类型的列中,但显示错误。 我还需要在查询中添加什么以使其接受该符号
【问题讨论】:
标签: c# mysql visual-studio
像这样在它前面加上一个反斜杠:
"Baby\'s world"
您可以使用以下命令在字符串中查找和替换它们:
str.Replace('\'', '\\\'')
我对最后一部分不是 100% 确定,但您需要在 ' 和 \ 前面添加一个 \ 来“转义”它。所以看起来没问题(无法测试,因为我不是 C# 程序员。
【讨论】:
INSERT INTO table (field) VALUES ('baby's world') 将失败,因为字符串被截断为INSERT INTO table (field) VALUES ('baby',其余部分被视为无效代码。
有两种方法可以阻止这种情况,第二种方法可用于良好的编码实践:
INSERT INTO table (field) VALUES ("baby's world")
INSERT INTO table (field) VAUES ('baby\'s world')
【讨论】:
INSERT INTO table (field) values ('+name.txt+') 呢?其中 name.txt 的文本为“婴儿的世界”
由于您询问的是 Visual Studio (.NET),因此您需要使用参数化查询。构造查询时不要使用连接
private void PrepareExample()
{
string s = Console.ReadLine();
MySqlCommand cmd = new MySqlCommand("INSERT INTO movie(title) VALUES (?title)", myConnection);
cmd.Parameters.AddWithValue( "?title", "baby's world" );
cmd.Prepare();
cmd.ExecuteNonQuery();
}
或者
private void PrepareExample()
{
MySqlCommand cmd = new MySqlCommand("INSERT INTO movie(title) VALUES (?title)", myConnection);
// try to input: baby's world. or try: baby"s world. everything are ok :-)
cmd.Parameters.AddWithValue( "?title", Console.ReadLine() );
cmd.Prepare();
cmd.ExecuteNonQuery();
}
虽然这不完全是串联,但不要使用这个:
qry = string.Format("INSERT INTO movie(title) VALUES("{0}", Console.ReadLine());
如果你真的发现需要以这种方式运行 SQL,请将单引号替换为反斜杠
qry = string.Format("INSERT INTO movie(title) VALUES("{0}",
Console.ReadLine().Replace("'", "\'");
但请考虑使用参数化查询而不是串联或 string.Format,因为参数化查询会自动处理那些分隔符的细微差别。
http://dev.mysql.com/doc/refman/5.0/es/connector-net-examples-mysqlcommand.html
【讨论】:
只需使用mysql_real_escape_string()。没有必要做任何其他事情。
例如:
mysql_real_escape_string($user),
mysql_real_escape_string($password));
【讨论】: