質問: DB::select('SELECT ... FROM ... ORDER BY ?',[$sortType]); echo json_encode(results); } ``` LaravelでランキングのAPIサーバーを作っています。 * 攻撃力順 `/data/ranking/attack` * 防御力順 `/data/ranking/defence` とリクエストされるとそれぞれ、 * ORDER BY `attack` DESC * ORDER BY `defence` DESC としたいです。 しかし、`?`で自動的にパースしてもらえるはずなのですが、 うまく動作しません。 以下の方法だとうまくいきました。 * `?` を使わずに文字列の結合をすると動作する (適切な処理をしてないのでセキュリティ的にまずいですが) どのようにすればよいでしょうか。
回答: 文字列はパースするのでsql文の結果は SELECT ... FROM ... ORDER BY 'attack'; となりエラーとなっているのではないですか? ?のパースは値に使うものでカラム名には使いません。 ormを使えばカラム名のsqlインジェクションチェックもライブラリでしてくれる思います。 https://readouble.com/laravel/5.dev/ja/eloquent.html Sample::orderBy($scoretype,'desc')->get();