PDOのプリペアステートメントでORDER BY句が動作してくれない。

つまりこういうこと。

やりたいことは、同じテーブルに対してさまざまな条件でソートしたいだけ。
ORDER BY の後を変数でSQL文に渡したいだけなのです。

例えば従業員一覧テーブルで、

$stmt = $pdo -> prepare("select * from `staff_table` order by age");
$stmt -> execute();

これは何の問題もない(とりあえず昇順降順は省略)。ところが、

$stmt = $pdo -> prepare("select * from `staff_table` order by :age");
$stmt -> bindValue(':age', "age", PDO::PARAM_STR);
$stmt -> execute();

これが全く効かない。
エラーも全く吐き出さず、primary_keyであるスタッフID順に取り出してくれる。
ageを変数にしてみてもダメ。何してもだめ。

さっきからいろいろググってみてるんだけど、例文はwhere句ばっかり。
やっと見つけたページでは、結局ここの部分だけは変数そのまま突っ込むって解決法。さわやか。文句も言えんわ。
http://stackoverflow.com/questions/2542410/how-do-i-set-order-by-params-using-prepared-pdo-statement

あれこれ頑張って英語のサイトとか調べてたんだけど、どうやらテーブルのカラムはプレースホルダーに出来ないらしく。
合ってます?
とにかくそういうことだと理解。

もしかして、これって常識なの?俺が知らなかっただけ?

とにかく、結局変数のまま突っ込むしかないってことか。
まあ、カラム名なので、変数の段階できちんとチェックしてインジェクション対策をやっとけばOKなのかな。
カラム名のみの配列を取得して、その中での存在チェックして、って感じでOKなんかな?

他に方法知ってる方いらっしゃいましたら教えて下さいませ。