«phpClub» — архив тем ("тредов"), посвящённых изучению PHP и веб-технологий.
Аноним 2017/04/15 13:13:24  №973968 1
$stmt = $pdo->prepare('SELECT FROM students ORDER BY :test DESC');
$stmt->execute(array(':test' => $sort));
Аноны, почему это не работает? Если делать сортировку без prepare, то все отлично работает.
$stmt = $pdo->query('SELECT
FROM students ORDER BY test DESC'); - работает.
Ответы: >>973998 >>974017
Аноним 2017/04/15 14:23:59  №973998 2
>>973968
>array(':test' => $sort)
Это еще что такое?
Ответы: >>974000 >>974017
Аноним 2017/04/15 14:27:41  №974000 3
>>973998
Точнее в таком случае у тебя должно быть так:
$stmt = $pdo->prepare('SELECT FROM students ORDER BY :test DESC');
$stmt->bindValue(':test', $sort);
$stmt->execute();
Короче ты путаешься в синтаксисе. Почитай про подстановку значений в ПДО, у ОПа еще есть где-то.
Ответы: >>974017
Аноним 2017/04/15 15:08:33  №974017 4
>>973867
Выбирай: https://packagist.org/search/?q=XML%20Serializer

>>973968
После подстановки твой запрос будет выглядеть примерно так: SELECT FROM students ORDER BY 'column' DESC
То есть вместо :test - строка, а нужен столбец (без кавычек).
Почему строка написано тут: https://secure.php.net/manual/en/pdostatement.execute.php

В качестве параметров PDO не используют столбцы или названия таблиц, так как параметры - это какие-то значения (строки, числа), пришедшие от пользователя. Для столбцов на голом PDO обычно пишут руками проверку: if (!in_array($column, ['age', 'name', ...])) { ...

>>973871
Если произошла ошибка, то PDO выбросит исключение. Это в старых MySQL расширениях для PHP нужно было постоянно проверки писать.

>>973998
Это синтаксис для массивов в PHP < 5.4

>>974000
В этом примере тоже будет ORDER BY 'строка' и сортировка не сработает. Строка потому что bindParam по дефолту всё приводит к PDO::PARAM_STR https://secure.php.net/manual/en/pdostatement.bindparam.php
Ответы: >>974022
Аноним 2017/04/15 15:16:43  №974022 5
>>974017
>В этом примере тоже будет ORDER BY 'строка' и сортировка не сработает. Строка потому что bindParam по дефолту всё приводит к PDO::PARAM_STR
Да, забыл. Можно эмуляцию отключить, ну или там просто отдельно пихать параметр сортировки.