geometria
@geometria

PDO: как использовать переменную в ORDER BY?

В этом запросе второй и третий параметр работают правильно, а сортировка проходит по столбцу id, а надо по столбцу name.
Ошибки включены, но ничего не показывают.

Как исправить?

$sort = 'name';
          $stm = $db->prepare('SELECT * FROM `users` ORDER BY ? ASC LIMIT ?,?');
          $stm->bindParam(1, $sort);
          $stm->bindValue(2, $art, PDO::PARAM_INT);
          $stm->bindValue(3, $kol, PDO::PARAM_INT);
          $stm->execute();
  • Вопрос задан
  • 492 просмотра
Решения вопроса 2
DevMan
@DevMan
усвойте простое правило: плейсхолдерами могут быть только данные, но НЕ имена таблиц/колонок/ключевые слова.

это правило баз данных, и пхп тут не исключение/вообще не роялит.
Ответ написан
Комментировать
FanatPHP
@FanatPHP
Чебуратор тега РНР
$allowed = ["name","price","qty"]; 
if (!in_array($sort, $allowed, true)) {
    throw new InvalidArgumentException("Invalid order by value"); 
}
$stm = $db->prepare('SELECT * FROM `users` ORDER BY `$sort` ASC LIMIT ?,?');
$stm->execute([$art,$kol]);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы