Как параметризовать имя таблицы в операторе PDO?

Проблема

Я получаю синтаксическую ошибку PDO при выполнении оператора PDO, в котором параметризовано имя таблицы, как в

$sql = 'DELETE FROM :table_name';
$query = $this->db->prepare($sql);
$query->execute(array(':table_name' => "mytable"));

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

Вопрос

Как это сделать?


person Sliq    schedule 16.10.2013    source источник


Ответы (2)


Вы не можете параметризовать имена таблиц, имена столбцов или что-либо еще в предложении IN (это должно быть связано отдельно). См. этот комментарий к php.net.

См. Также: Могут ли операторы PHP PDO принимать таблицу или столбец имя как параметр?

person Amal Murali    schedule 16.10.2013
comment
Я думал, что вы можете использовать связанные параметры в предложении IN, если вы привязываете каждый по отдельности? Т.е. IN (?) работать не будет, а IN (?, ?, ?) должно. - person andrewsi; 16.10.2013
comment
@andrewsi: ты прав. Я обновил ответ, чтобы избежать путаницы. - person Amal Murali; 16.10.2013
comment
Есть ли специалист по сопровождению PDO, который мог бы это исправить? Это очень распространенный вопрос, и его решения всегда вызывают опасения, из-за отсутствия официального метода решения этой проблемы. - person tadman; 16.10.2013

Вы не можете параметризовать имя таблицы с помощью подготовленных операторов PDO и MySQLi, потому что серверу SQL требуется базовая информация для подготовки запроса перед выполнением фактического запроса.

person Jason OOO    schedule 16.10.2013