Параметры SQLite - не позволяющий имя таблицы как параметр

Сделайте ряд Объектов Передачи данных, нескольких картопостроителей и возврата это через .asmx.
Вы должны никогда , выставляют объекты базы данных непосредственно, поскольку изменение в схеме процедуры распространит потребителю веб-сервиса без Вас замечающий его.

12
задан user117046 13 August 2009 в 20:38
поделиться

2 ответа

Обычно нельзя использовать параметры / заполнители SQL для идентификаторов базы данных (таблиц, столбцов, представлений, схем и т. Д.) Или функций базы данных (например, CURRENT_DATE ), но вместо этого только для привязки буквальных значений .

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

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

33
ответ дан 2 December 2019 в 04:43
поделиться

Не уверен, что это то же самое, но я наткнулся на нечто подобное в Java. По сути, вы не можете добавить таблицу в качестве параметра, поэтому вы должны сгенерировать такой оператор:

var statement:SQLStatement = new SQLStatement();
statement.connection = connection;
statement.text = stringUtil.substitute("INSERT :Fields FROM {0}", "Category");
statement.parameters[":Fields"] = "*";
statement.execute;

Это, скорее всего, не самое безопасное решение, поэтому вы можете захотеть выполнить некоторую настраиваемую проверку данных перед добавлением имени таблицы. . чтобы кто-то не пытался отправить ему имя таблицы "; drop tableName ..."

-1
ответ дан 2 December 2019 в 04:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: