【问题标题】:how to add ' like special characters in mysql varchar data type column?如何在 mysql varchar 数据类型列中添加 'like 特殊字符?
【发布时间】:2011-10-08 09:25:12
【问题描述】:

我试图通过查询将字符串作为“婴儿的世界”插入到 varchar 类型的列中,但显示错误。 我还需要在查询中添加什么以使其接受该符号

【问题讨论】:

    标签: c# mysql visual-studio


    【解决方案1】:

    像这样在它前面加上一个反斜杠:

    "Baby\'s world"
    

    您可以使用以下命令在字符串中查找和替换它们:

    str.Replace('\'', '\\\'')
    

    我对最后一部分不是 100% 确定,但您需要在 ' 和 \ 前面添加一个 \ 来“转义”它。所以看起来没问题(无法测试,因为我不是 C# 程序员。

    【讨论】:

    • “我如何处理查询?”是什么意思?如果在字符串的每个 ' 前面添加一个 \ 就没有问题。
    • 我正在通过查询插入数据,以便文本框中传递的值和文本框值进入插入查询,那么我怎样才能检测到任何特殊符号是否正在运行
    • 在 php 中有一个名为addslashes 的函数可以为你工作。你可以用你选择的语言谷歌搜索。
    • 因为您使用的是 c#,所以我在答案中添加了它。祝你好运,让我知道它是否有效 :) 根据 Microsoft 的说法,.NET 没有“addslashes()”功能。
    • 你可以试试这个。我也不是 c# 程序员:digitalcoding.com/Code-Snippets/C-Sharp/…
    【解决方案2】:

    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')

    【讨论】:

    • true.that 工作正常。但如果是 INSERT INTO table (field) values ('+name.txt+') 呢?其中 name.txt 的文本为“婴儿的世界”
    【解决方案3】:

    由于您询问的是 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

    【讨论】:

      【解决方案4】:

      只需使用mysql_real_escape_string()。没有必要做任何其他事情。

      例如:

      mysql_real_escape_string($user),
      mysql_real_escape_string($password));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-29
        • 1970-01-01
        • 1970-01-01
        • 2013-07-30
        • 2016-07-20
        • 1970-01-01
        相关资源
        最近更新 更多