INSERT错误 - 1064

时间:2011-11-03 04:13:45

标签: c# mysql mysql-error-1064

我有一个函数应该接受x2字符串输入并将它们插入到mySQL数据库中。这两个字符串是查询结果,可以是任何内容。我在测试期间收到此错误。

  

ex {“您的SQL语法有错误;请查看手册   对应于您的MySQL服务器版本,以便使用正确的语法   接近一个好的开始,但我可以保证你不会。他没有   在第1行“} System.Exception {MySql.Data.MySqlClient.MySqlException}

经过一番思考后,我得出的结论是它出错了,因为我的一个字符串包含了撇号'字符并且正在搞乱mySQL语法。我可以对我的字符串做些什么来确保它们可以像我们的表中的所有字符一样被INSERT-ed?

我尝试过字符串操作&使用AddWithValue()函数,但到目前为止都没有。我认为使用Replace函数会有所帮助,但我想知道我希望输出的mySQL语法是什么。

任何想法/建议表示赞赏。谢谢。

public void Insert(string SearchQuery, string QueryResult)
        {
            const string connString = "SERVER=localhost; DATABASE=social_db; UID=root; PASSWORD=pass;";
            MySqlConnection connection = new MySqlConnection(connString);
            MySqlCommand command = connection.CreateCommand();

            QueryResult = QueryResult.Replace("'", "\'");

            command.CommandText =
                "INSERT INTO social_tbl (SearchQuery, QueryResult)"
                + " VALUES "
                + "('" + SearchQuery + "', '" + QueryResult + "');";

            //command.CommandText =
            //"INSERT INTO social_tbl (SearchQuery, QueryResult) VALUES ('@SearchQuery', '@QueryResult');";

            //command.Parameters.AddWithValue("@SearchQuery", SearchQuery);
            //command.Parameters.AddWithValue("@QueryResult", QueryResult);

            connection.Open();

            command.ExecuteNonQuery();

            connection.Close();         
        }

3 个答案:

答案 0 :(得分:1)

永远不要将参数连接成SQL字符串 - this opens up a very serious security hole (SQL injection!)

使用

        command.CommandText =
        "INSERT INTO social_tbl (SearchQuery, QueryResult) VALUES (@SearchQuery, @QueryResult);";

        command.Parameters.AddWithValue("@SearchQuery", SearchQuery);
        command.Parameters.AddWithValue("@QueryResult", QueryResult);

使用此功能,您不需要Replace并使用“绑定参数”,这使您可以从SQL注入中获得安全保护,有时甚至可以提高性能。在原始代码中,每个参数周围都有' - 在使用“绑定参数”时,这不是必需的(如您所知)。

答案 1 :(得分:0)

试试这个:

INSERT INTO social_tbl ('SearchQuery', 'QueryResult')

答案 2 :(得分:0)

我不完全确定原因,但在查看其他一些问题后,我发现使用'?'而不是'@'字符。好像已经解决了我的问题。

command.CommandText =
            "INSERT INTO socialm_tbl (SearchQuery, QueryResult) VALUES (?SearchQuery, ?QueryResult);";

            command.Parameters.AddWithValue("?SearchQuery", SearchQuery);
            command.Parameters.AddWithValue("?QueryResult", QueryResult);