What' s обычная практика в образовании оператора Where на основе ввода данных пользователем

Если мы берем таблицу базы данных, мы можем подвергнуть сомнению все ряды, или мы можем применить фильтр на нее. Фильтр может измениться в зависимости от ввода данных пользователем. В случаях, когда есть немного вариантов, мы можем определить различные вопросы для тех немногих особых условий. Но если есть партии и много вариантов, что пользователь мог бы или не мог бы определить, вышеупомянутый метод не появляется удобный. Я знаю, я могу составить фильтр, основанный на вводе данных пользователем, и послать его как последовательность к соответствующей хранимой процедуре в качестве параметра, построить вопрос с тем фильтром и наконец выполнить строку запроса с помощью, ВЫПОЛНЯЮТ НЕМЕДЛЕННЫЙ (В случае Oracle). Не знайте, почему, но мне действительно не нравится этот способ здания вопроса. Я думаю этот способ, которым я оставляю двери открытыми для инжекторов SQL. И кроме того, что я всегда испытываю затруднения из-за самого вопроса, поскольку все - просто последовательность, и я должен обращаться с датами и числами тщательно. Каков лучший и наиболее используемый метод формирования оператора Where вопроса против таблицы базы данных?

1
добавлено
Просмотры: 2
nl ja de

2 ответы

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

Это будет охранять вас против Внедрения SQL.

2
добавлено
Используя связывают параметры, действительно защищает от Внедрений SQL. Но как я строю фильтр, если много много вариантов могут быть определены. It' не гарантируемый, что все варианты фильтра будут использоваться. Это означает, что я должен проверить на значение параметра, если it' s не пустой тогда добавляют его к моему оператору Where, иначе нет. Это дает тот же самый результат. Тем не менее у меня должно быть что-то как то, ЕСЛИ MyPARAM1 - NOT NULL ТОГДА MYWHERE_CLAUSE: = MY_WHERECLAUSE || TO_CHAR (MYPARAM1).... И затем MY_QUERY: = MY_QUERY || MY_WHERE_CLAUSE и так далее. Я хочу избежать этого.
добавлено автор Mikayil Abdullayev, источник
Если много много вариантов определяются, то you' ll должен включать их. Да, it' s обременительный, но it' s что-то все мы должны сделать.
добавлено автор Paul Alan Taylor, источник

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

Точный подход зависит от вашего клиента, программирующего структуру: у.NET есть Структура Предприятия и LINQ2SQL это оба дерева выражений поддержки; Ява имеет, Зимуют и JPA, и так далее. Я видел, что несколько различных структур раньше строили настраиваемые вопросы с большим успехом. В ситуациях, когда эти структуры не доступны, вы можете самокрутка, хотя требуется намного больше работы.

1
добавлено
Это кажется хорошим мне.
добавлено автор Mikayil Abdullayev, источник