Работа с котировками, добавленными PDO :: prepare ()

Согласно документации PHP PDO :: prepare () добавляет кавычки ко всем вашим параметрам, поэтому вам не нужно беспокоиться об этом:

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

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

SELECT * FROM ? WHERE ?=? 

в отличие от SELECT * FROM tablename WHERE? =?

Таким образом, мой вопрос заключается в том, можно ли запретить моему объекту PDO добавлять кавычки вокруг параметра FROM, чтобы я не получал SQL-ошибок, брошенных мне в лицо? Или я должен сделать это по-другому.

Related of "Работа с котировками, добавленными PDO :: prepare ()"

Заполнители в подготовленных заявлениях предназначены только для значений. Единственный способ вставить динамические имена таблиц – сделать это самостоятельно

 "SELECT FROM `".$table."` WHERE `".$column."` = ?" 

@KingCrunch в основном верен в его ответе. Вы должны действительно избежать строки самостоятельно. Что-то вроде этого должно защищать от большинства инъекций:

 //make sure $table and $column only contain alphanumeric chars $table = preg_replace("/[^A-Za-z0-9]/", '', $table); $column = preg_replace("/[^A-Za-z0-9]/", '', $column); $query = "SELECT FROM `{$table}` WHERE `{$column}` = ?"