ganesh tale Ответов: 2

Как я могу найти строку в таблице базы данных mdb


Здравствуйте, сэр, я работаю над проектом выставления счетов в ресторане. использование mdb-файла
Я хочу найти бренд, строка которого является "Blender's"
когда я ищу строку без комы, я могу найти этот бренд (блендеры) , но
Когда я ищу (Blender) vb, показывающий синтаксическую ошибку сообщения (оператор отсутствует)
Dim DT2, dt3 как новый DataTable
GetDataTable("SELECT * FROM BRANDML Where BRAND='" & txtItemName.Текст & '", dt3)

Что я уже пробовал:

я хочу строку поиска так же, как (Blender) я хочу текст поиска с Апострофом s

ganesh tale

я хочу найти эти данные из правительственной базы данных, потому что я не могу заменить строку, которую я хочу прочитать, как это строка из правительственной базы данных

ganesh tale

я хочу найти эти данные из правительственной базы данных, потому что я не могу заменить строку, которую я хочу прочитать, как это строка из правительственной базы данных

2 Ответов

Рейтинг:
2

Patrice T

Цитата:
Когда я ищу (Blender) vb, показывающий синтаксическую ошибку сообщения (оператор отсутствует)

Потому что вы поймали себя на SQL-инъекции.
С:
txtItemName.Text= "Blender's"
GetDataTable("SELECT * FROM BRANDML Where BRAND='" & txtItemName.Text & "'", dt3)

ваш запрос:
GetDataTable("SELECT * FROM BRANDML Where BRAND='Blender's'", dt3)

которые делают 3 одинарные кавычки в запросе, таким образом, синтаксическая ошибка.
См. ссылки ниже для использования параметров.

Никогда не создавайте SQL-запрос путем объединения строк. Рано или поздно вы сделаете это с помощью пользовательских вводов, и это откроет дверь к уязвимости под названием "SQL-инъекция", она опасна для вашей базы данных и подвержена ошибкам.
Одна кавычка в имени - и ваша программа выйдет из строя. Если пользователь вводит имя, например "Брайан О'Коннер", может привести к сбою вашего приложения, это уязвимость SQL-инъекции, и сбой-это наименьшая из проблем, вредоносный пользовательский ввод, и он продвигается к командам SQL со всеми учетными данными.
SQL-инъекция - Википедия[^]
SQL-инъекция[^]
Атаки SQL-инъекций на примере[^]
PHP: SQL-инъекция - руководство пользователя[^]
Шпаргалка по предотвращению инъекций SQL - OWASP[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? - Обмен Стеками Информационной Безопасности[^]


Рейтинг:
18

OriginalGriff

Только не это! Никогда не объединяйте строки для построения команды SQL. Это оставляет вас широко открытыми для случайной или преднамеренной атаки SQL-инъекции, которая может уничтожить всю вашу базу данных. Вместо этого всегда используйте параметризованные запросы.

Когда вы объединяете строки, вы вызываете проблемы, потому что SQL получает такие команды, как:

SELECT * FROM MyTable WHERE StreetAddress = 'Baker's Wood'
Цитата, добавленная пользователем, завершает строку в том, что касается SQL, и вы получаете проблемы. Но могло быть и хуже. Если я приду и наберу вместо этого: "x';DROP TABLE MyTable;--", то SQL получит совсем другую команду:
SELECT * FROM MyTable WHERE StreetAddress = 'x';DROP TABLE MyTable;--'
Которые SQL видит как три отдельные команды:
SELECT * FROM MyTable WHERE StreetAddress = 'x';
Совершенно правильный выбор
DROP TABLE MyTable;
Вполне допустимая команда "удалить таблицу"
--'
А все остальное-это комментарии.
Так оно и происходит: выбирает любые совпадающие строки, удаляет таблицу из базы данных и игнорирует все остальное.

Поэтому всегда используйте параметризованные запросы! Или будьте готовы часто восстанавливать свою БД из резервной копии. Вы ведь регулярно делаете резервные копии, не так ли?

Исправив это во всем вашем приложении, вы также избавитесь от проблемы, которую вы заметили...


ganesh tale

я не могу отбросить или заменить, потому что хочу прочитать эти данные из правительственной базы данных

OriginalGriff

Не имеет значения, из какой базы данных вы читаете: код, подверженный SQL-инъекциям, глупо опасен!

И если остальная часть вашего приложения будет такой же ... у тебя настоящие проблемы.

phil.o

Использование параметризованных запросов, как это было предложено, позволит вам получить функциональность, которую вы просите, и в то же время укрепить безопасность.
Ваш комментарий показывает, что вы даже не пытались понять, что здесь поставлено на карту.

MadMyche

Если вы не хотите отбрасывать таблицу, то не пишите код, который позволит кому-то это сделать.