PHP / PDO: подготовленные операторы не работают при создании таблицы? - PullRequest
4 голосов
/ 08 сентября 2010

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

$stmt = $dbh->prepare("CREATE TABLE ? (id foo, int bar,...)");
$stmt->execute(Array('table_foobar'));

Все, что он делает, это заменяет ? на 'table_foobar', одинарные кавычки не позволяют мне создать таблицу!

В итоге мне нужно сделать sprintf в ТОПе подготовленного оператора, чтобы добавить предопределенное имя таблицы.

Что, черт возьми, мне здесь не хватает?

Ответы [ 2 ]

9 голосов
/ 08 сентября 2010

Я не могу найти ничего ясного в руководстве, но, глядя на примечания пользователя, использование параметров предназначено только для фактических значений , а не имен таблиц, имен полей и т. Д.

Должна (и может) использоваться нормальная конкатенация строк.

$tablename = "tablename";
$stmt = $dbh->prepare("CREATE TABLE `$tablename` (id foo, int bar,...)");
0 голосов
/ 08 сентября 2010

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

Нет необходимости использовать динамическое имя таблицы.

...