Использование вопросительного знака вместо имени таблицы в подготовленных инструкциях 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);

Источник (см. Пример № 2)

Другие вопросы по тегам