ВСТАВИТЬ Ошибка - 1064 - PullRequest
       10

ВСТАВИТЬ Ошибка - 1064

0 голосов
/ 03 ноября 2011

У меня есть функция, которая должна принимать x2 String Inputs и вставлять их в базу данных MySQL. Две строки являются результатами запроса и могут быть чем угодно. Я получаю эту ошибку во время тестирования.

ex {"У вас ошибка в синтаксисе SQL; обратитесь к руководству, которое соответствует вашей версии сервера MySQL для правильного использования синтаксиса Это хорошее начало, но я могу гарантировать, что этого не произойдет. Он не в строке 1 "} System.Exception {MySql.Data.MySqlClient.MySqlException}

После некоторого размышления я пришел к выводу, что он выдает ошибку, потому что одна из моих строк содержит символ апострофа и работает с синтаксисом mySQL. Что я могу сделать со своими строками, чтобы убедиться, что они могут быть вставлены как есть со всеми их символами в моей таблице?

Я пробовал манипулировать строками и использовать функцию 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 ]

1 голос
/ 03 ноября 2011

Никогда не объединяйте параметры в строку SQL - это открывает очень серьезную дыру в безопасности (SQL-инъекция!) .

использование

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

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

С этим выне нужно Replace и использовать «параметры привязки», которые защищают от внедрения SQL, а иногда даже повышают производительностьВ исходном коде у вас было ' вокруг каждого параметра - это не нужно и не сработало бы (как вы уже обнаружили) при работе с «параметрами связывания».

0 голосов
/ 03 ноября 2011

Я не совсем уверен, почему, но, посмотрев на некоторые другие вопросы для понимания, я обнаружил, что с помощью '?'вместо символа @.кажется, решил мою проблему.

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

            command.Parameters.AddWithValue("?SearchQuery", SearchQuery);
            command.Parameters.AddWithValue("?QueryResult", QueryResult);
0 голосов
/ 03 ноября 2011

Попробуйте это:

INSERT INTO social_tbl ('SearchQuery', 'QueryResult')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...