Не работает SQL запрос Update

118
29 ноября 2019, 00:20

Проблема в том что не работает SQL запрос UPDATE. Вот сама таблица.

Вот запрос:

myConnection3.Open();
string item = "redit";
int items_id = 3;
string query3 = string.Format("UPDATE items SET i_status = " + item + " WHERE items.id = "+items_id);
SqlCommand command3 = new SqlCommand(query3, myConnection3);
SqlDataReader reader3 = command3.ExecuteReader();
Answer 1

Никогда не собирайте запросы конкатенацией со строковыми переменными! Если еще не знаете что такое sql-инъекция, то просто подставьте в качестве значения item, ну например такую строку "''; go; drop table items; go;". Что-то мне подсказывает, что в реальном коде значение item будет приходить извне. Ну и опечатки с экранированием текста опять же.

Вместо этого лучше использовать параметризованный запрос:

myConnection3.Open();
string item = "redit";
int items_id = 3;
string query3 = string.Format("UPDATE items SET i_status = @item WHERE items.id = @itemId");
SqlCommand command3 = new SqlCommand(query3, myConnection3);
command3.Parameters.Add("@item", SqlDbType.NVarChar, -1) = item;
command3.Parameters.Add("@itemId", SqlDbType.Int).Value = items_id;
command3.ExecuteNonQuery();

Таким способом будет сгенерирован корректный запрос и ни каких вопросов с кавычками, экранированием и инъекциями. Тут подробно и с примерами: Свойство SqlCommand.Parameters

ExecuteReader() может сработать, т.к. запрос не обязан возвращать хоть что-то, но если запрос заведомо не возвращает данные, а, например, только пишет в БД, то, для лучшей читаемости, стоит использовать ExecuteNonQuery(), который просто выполняет запрос и не ждет получения каких либо данных от сервера.

Что касается "Остальные запросы ( Insert ) работают и так", то вы ошибаетесь, кавычки '<значение>' обязательны для текстовых литералов в MS SQL (T-SQL). Возможно в других запросах значения приходят уже экранированными или где-то "глушатся" исключения, но в любом случае запрос с синтаксической ошибкой не может быть выполнен.

READ ALSO
Выводим определенную рубрику в записях

Выводим определенную рубрику в записях

Как правильно заменить, чтобы выводились не все рубрики, а только определенная рубрика, которая мне нужна? Менял category__not_in безрезультатно

149
Репозитории по DDD

Репозитории по DDD

Я не могу понять, как правильно реализовать по DDD связанные репозиторииНиже синтетический пример, мне приходится писать два запроса к БД, тогда...

137
пишем на php cli

пишем на php cli

Добрый вечер

146
Почему компилятор выдаёт ошибку (T_VARIABLES) PHP

Почему компилятор выдаёт ошибку (T_VARIABLES) PHP

Что здесь синтаксически неправильно? Ругается на строчку где добавляется $_GET['label'];

111