エンジニアのひよこ_level10

毎日更新してた人。たまに記事書きます。

【Laravel】クエリビルダのtoSql()とgetBindings()とは?【600日目】

クエリビルダのクエリを見たい

User::select('*')->where('id', '>', 3);

こんな感じのクエリビルダで、実際に走るSQLを見たい。

toSql()

User::select('*')->where('id', '>', 3)->toSql();

これで、実際のSQLが見れる。

select * where id > ?

あれ?この ?ってなに? 3ってどこにいった?

?はプレースホルダ

これは、SQLを書くときによく使われる手法で、
SQLインジェクションなど、サーバーに攻撃してくるものを防ぐために、
SQLに直接値を入れるのではなく、
?に向かって代入をすることで、アタックされるのを防ぐ手法。

SQLインジェクションプレースホルダについての詳細はここでは省略。

問題は、このままだと代入すべき 3がないじゃんというお話。

getBindings()

User::select('*')->where('id', '>', 3)->getBindings();

これで、配列で3が入っているのがわかる。

Laravelの元コードを読んでいくと、これらを組み合わせてSQLが走っているのがわかりますね!