Подготовленный оператор SQL для создания таблицы - PullRequest
7 голосов
/ 07 сентября 2010

Я хотел бы узнать, как можно на лету создать таблицу на основе пользовательского ввода (SQL Prepared Statement)

CREATE TABLE ? (
  First_Name char(50),
  Last_Name char(50)
)

Что я должен поставить вместо знака вопроса

Ответы [ 2 ]

12 голосов
/ 07 сентября 2010

Заполнители PreparedStatement не предназначены для имен таблиц или столбцов, они предназначены только для фактических значений столбцов.

Таким образом, вам придется динамически создавать (подготовленную) строку оператора, что означает, что ваше приложение будет уязвимым для SQL-инъекции . В зависимости от того, как приложение должно использоваться - и кем - это может быть БОЛЬШОЙ проблемой.

Схожий вопрос

1 голос
/ 07 сентября 2010

Как указывают другие ответы, в этом случае нельзя использовать подготовленный оператор, так как замена имен таблиц не поддерживается в большинстве СУБД.

Однако я хотел бы отметить, что при выборе таблицыИмя, основанное на пользовательском вводе, кажется плохой идеей.Как предотвратить дублирование или недопустимые имена?

Почему имя таблицы имеет значение?

...