Dzieje się tak, ponieważ ORDER BY
używa identyfikatora bazy danych (tj. kolumny, aliasu lub wyrażenia). Przekazujesz wartość jako parametr.
Innymi słowy, wynikowe zapytanie byłoby równoważne
... ORDER BY 'StartTime' ...
Jeśli walidujesz dane wprowadzone przez użytkownika ze znanym zestawem wartości (tj. dostępnymi kolumnami), możesz po prostu interpolować wartość do ciągu zapytania, np. (bardzo przybliżone)
$orderBy = $_GET['order_by'];
if (!in_array($orderBy, $orderableColumns)) {
throw new Exception('Invalid "order by" specified');
}
$query = sprintf('... ORDER BY `%s` ...', $orderBy);