X

PDO: Unknown column in 'order clause'

В одном маленьком проекте, решил задействовать фреймворк для бд Medoo, который работает через PDO.  Однако, вскоре столкнулся с ошибкой [42S22, 1054] Unknown column 'on' in 'order clause'.  Я довольно долго не мог въехать в чем проблема, а когда чисто случайно нашел решение, удивился. Поэтому и оставляю эту заметку, для всех тех, кто также столкнется с чем-то похожим.

Запрос был довольно простой:

SELECT * FROM projects ORDER BY 
CASE status
WHEN "on" THEN 0
WHEN "stop" THEN 1
WHEN "off" THEN 2
END

Однако по какой-то причине он приводил к ошибке вида:

Array (
 [0] => 42S22
 [1] => 1054
 [2] => Unknown column 'on' in 'order clause'
)

Самое интересное было то, что при попытке выполнить его в Adminer, все работало.

Я долго ковырялся и пытался понять в чем же проблема.. Оказалось, что в запросе надо просто заменить кавычки с двойных на одинарные, т.е. вот так:

SELECT * FROM projects ORDER BY 
CASE status
WHEN 'on' THEN 0
WHEN 'stop' THEN 1
WHEN 'off' THEN 2
END

После этого, всё заработало как и ожидалось. Не знаю, баг ли это или особенность, просто в случае подобной проблемы, попробуйте поступить так же.

Категории: MySQL PHP
Тэги: medooorder bypdo