🙆‍♂️

LaravelのWhereRaw使うときのしゃけ🙆‍♂️おかか🙅‍♂️

2021/09/09に公開

はじめに

やあ、毎日がブギウギなプログラマーのあおいくんだよ。
みんなはLaravelでWhereRaw使うとき正しく使えてる?
僕はアホチンだったから正しく使えてなかったよ🤷‍♂️
今回はそんな僕の失敗を共有してみんなに正しいLaravelのWhereRawの使い方、すなわちWhereRawのしゃけ🙆‍♂️おかか🙅‍♂️を学んでもらおうってわけ。

環境

PHP:7.4系
Laravel:7.x系

おかか🙅‍♂️なWhereRaw

まずは以下のコードを見てね。

$title = $request->get('title')
$posts = Post::whereRaw("title = '" . $title . "'")->get();

おわかりいただけただろうか。
こういうwhereRawの使い方をすると何がまずいって「SQLインジェクション」で攻撃される可能性があるってことね。
文字列結合でSQLを発行してるから、画面から受け取った$titleに入ってる文字列はエスケープされてない状態でそのまま挿入されちゃうんだよね。
そんでそれがそのまま実行されて…🤦‍♂️
こんなのおかか🙅‍♂️な実装だよね。

しゃけ🙆‍♂️なWhereRaw

正しいWhereRawの使い方はこうだよ。

$title = $request->get('title')
$posts = Post::whereRaw('title = ?', [$title])->get();

もしくは

$title = $request->get('title')
$posts = Post::whereRaw("title = :title", ['title' => $title])->get();

whereRawの第2引数にbindingsの配列を指定することでちゃんとエスケープされたSQLを発行してくれるよ。
これがしゃけ🙆‍♂️な使い方。

そもそもの話をすると🤦‍♂️

こうやって書いてきたLaravelのWhereRawの使い方なんだけど、そもそもの話をしちゃうとこれ、全部ドキュメントに書いてあるんだよね。

ドキュメントに、書いてあるんだよね!!!!

https://readouble.com/laravel/7.x/ja/queries.html
つまりおかかな実装をしているアホチンはドキュメント読まずに持ち前の腕っぷしとスパイダーセンスでプログラミングしちゃってるプログラマーちゃんなんだよね🤦‍♂️
僕も自慢の腕っぷしでプログラミングしてたからこういうことになっちゃったんだよね。
つまり今回一番学んでほしいことは、WhereRawの正しい使い方なんていうLaravelというフレームワークでしか役に立たない知識じゃなくて、まずはドキュメントをちゃんと読めっていう普遍的な姿勢なんだよね。
しゃけなプログラミングができてる人はこのままがんばって👏
残念ながらおかかなプログラミングをしちゃってた人は僕と一緒に大反省をしよう!
安心しな、失敗したのは君ひとりじゃないぜ👊

おわりに

こんな間違い犯しちゃうザコでもプログラミングしちゃう!
だってプログラミングは楽しいだもの〜🙋‍♂️
みんなも懲りずに、コードの波でサーフィンしようぜ〜🏄‍♂️

Discussion