おーしまブログ

プログラミングやってます

【PHP】whereRawで直接SQL文を挿入して、データを取ってくる

こんにちは、おーしまです。

今回は、WhereRawでクエリビルダに直接SQL文を挿入する方法について書きます。



例えば、resource_stocksという資材の在庫を管理するテーブルがあったとします。
内容は以下の通りです。
f:id:tomo_bb_aki0118115:20210310234735p:plain


ここで、ターミナルで、

select stock + 1000 from resource_stocks;

と記述すると、

f:id:tomo_bb_aki0118115:20210310234959p:plain

上記の画像のように、stockカラムの数値に+1000されたデータが並びました。
SQL文ではこれを1つのカラムとして扱うことができるのです。
この時、カラム名は「stock + 1000」となっています。

新しく作ったカラムに独自の名前をつける場合は、

select stock + 1000 from resource_stocks as おーしま;

とすることで、「おーしま」と言うstockカラムに+1000した新しいカラムができます。



以上を踏まえて、whereRawについて書いていきます。

今回は、先程のresource_stocksテーブルのstockに数値を足して、その値が20以下のものを取得したいとします。
しかし、その数値が「$plusStock」と言う変数になっているとします。

すると、こうなります。

<? php

$select->whereRaw('stock + ? <= 20', [$plusStock]);

?>

whereRaw( 'SQL文' , [変数])
で表されていて、変数を入れたい箇所を「?」として、第二引数の配列に変数を記述することで代入されます。

2つ、もしくは3つの変数を使いたい時でも、「?」を変数の数だけ記述して、使用する順番に配列に変数を記述することで対応できます。


DB::rawでも変数を直接入れることができますが、もし変数の中身に悪意のある文字列などが入っていた時、テーブルの値を全て消されるなどの脆弱性があり危険なので、whereRawやselectRawを使用するようにしましょう。


whereRawやselectRawを使用すれば、もし悪意のある文字列が変数の中に入っていても、Laravelがはじいてくれます。



今回はここまでです。
それでは、また。

ここはどこ おれはだれ それに近いものがあんだよ 始めようとした奴らも迷い始めてる 怖がらせないでよ そりゃ甘くはないけど まだまだ 夢見ていい世界なんでしょ {UVERwould「ハイ!問題作」}