pgsql 42601 ошибка с PDO :: execute - PullRequest
0 голосов
/ 09 января 2012

У меня проблемы с $ pdo-> execute ($ values).

Работает нормально, если я использую $pdo->execute() без значений $:

<code>$dsn = sprintf('%s:host=%s;port=%s;dbname=%s', DB_TYPE, DB_HOST, DB_PORT, DB_NAME);
$pdo = new PDO($dsn, DB_USER, DB_PASS, array());
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$sql = 'SELECT * FROM "user" ORDER BY id DESC LIMIT 50 OFFSET 0';
$stmt = $pdo->prepare(trim($sql));
$stmt->setFetchMode(PDO::FETCH_OBJ|PDO::FETCH_PROPS_LATE);
$stmt->execute();

echo "<pre>";
print_r($stmt->fetchAll());
echo "
";

Работает нормально, но когда я хочу добавить замену значений:

<code>$dsn = sprintf('%s:host=%s;port=%s;dbname=%s', DB_TYPE, DB_HOST, DB_PORT, DB_NAME);
$pdo = new PDO($dsn, DB_USER, DB_PASS, array());
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$sql = 'SELECT * FROM "user" ORDER BY ? ? LIMIT 50 OFFSET 0';
$values = array('id','DESC');

$stmt = $pdo->prepare(trim($sql));
$stmt->setFetchMode(PDO::FETCH_OBJ|PDO::FETCH_PROPS_LATE);
$stmt->execute($values);

echo "<pre>";
print_r($stmt->fetchAll());
echo "
";

Это не работает. Возвращает:

SQLSTATE [42601]: синтаксическая ошибка: 7 ОШИБКА: синтаксическая ошибка на уровне или около $ 2 ЛИНИЯ 1: ВЫБЕРИТЕ * ИЗ "ПОЛЬЗОВАТЕЛЯ" ЗАКАЗАТЬ НА $ 1 $ 2 ПРЕДЕЛ 50 СМЕЩЕНИЕ 0 ^ 'в ...

1 Ответ

1 голос
/ 09 января 2012

ORDER BY ожидает разделенный запятыми список столбцов, если в заказе более одного столбца

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...