Использование вопросительного знака вместо имени таблицы в подготовленных инструкциях PDO
Мне нужно знать, могу ли я использовать вопросительные знаки (?
) в PDO подготовлены заявления в виде имени таблицы или нет.
$table = $_POST['table'];
$id = $_POST['id'];
$sql = "UPDATE ? SET priority = priority + 1 WHERE id = ?";
$q = $db->prepare($sql);
$q->execute(array($table,$id));
Я получаю эту ошибку:
Предупреждение: PDO::prepare() [pdo.prepare]: SQLSTATE[42000]: синтаксическая ошибка или нарушение доступа: 1064 В синтаксисе SQL есть ошибка; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с '? УСТАНОВИТЬ приоритет = приоритет + 1 ГДЕ id =?'
2 ответа
Помимо этой простой проблемы, есть еще одна проблема - ваш код пахнет плохим дизайном базы данных. В правильно спланированной базе данных вам никогда не потребуется получать имя таблицы с помощью запроса POST.
Скорее всего, вы используете несколько таблиц, где вы должны использовать только одну.
Вам необходимо привязать параметры следующим образом:
$q->bindParam(1, $table);
$q->bindParam(2, $id);