Когда я использую подготовленный PDO-оператор и использую его для подключения имени таблицы к запросу, который он не выполняет, быстрый пример:
$stmt = $dbh->prepare("CREATE TABLE ? (id foo, int bar,...)"); $stmt->execute(Array('table_foobar'));
Все, что он делает, заменяет ?
с 'table_foobar'
, одиночные кавычки не позволяют создать таблицу для меня!
В итоге мне нужно сделать sprintf
в TOP из подготовленного оператора, чтобы добавить в предопределенное имя таблицы.
Чего мне здесь не хватает?
Я не могу найти ничего понятного в руководстве, но, глядя на пользовательские примечания, использование параметров предназначено только для фактических значений , а не для имен таблиц, имен полей и т. Д.
Нормальная конкатенация строк должна (и может) использоваться.
$tablename = "tablename"; $stmt = $dbh->prepare("CREATE TABLE `$tablename` (id foo, int bar,...)");
Если вы создаете таблицу динамически, это, скорее всего, означает, что вы не понимаете идеологию реляционной базы данных и, как результат, делаете что-то неправильно.
Просто создайте все таблицы при настройке приложения из готового дампа и не создавайте никаких таблиц во время выполнения.
Нет необходимости использовать динамическое имя таблицы вообще.