Appearance
Eloquent vs 生 SQL ― AI 生成の raw query を採用するか?
この章のキーワード
| 用語 | 意味 | なぜ重要か |
|---|---|---|
| SQL インジェクション | ユーザー入力を通じて不正な SQL を実行させる攻撃 | データ漏洩やDB破壊の原因 |
| パラメータバインディング | 値を SQL とは別に送る仕組み | 値が SQL として解釈されることを防ぐ |
| Eloquent | Laravel の ORM(オブジェクト関係マッパー) | 安全な SQL を自動生成 |
| DB::raw | 生の SQL 式を直接使う Laravel のメソッド | 集計関数等で必要だが注意が必要 |
Phase 1: 観察
AI に「日付ごとのユーザー登録数を集計するクエリを書いて」と頼むと、こんなコードが返ってきます。
php
// AI が生成した集計クエリ
$stats = DB::select("
SELECT DATE(created_at) as date, COUNT(*) as count
FROM friends
WHERE bot_id = {$botId}
AND created_at >= '{$startDate}'
GROUP BY DATE(created_at)
ORDER BY date DESC
");一方、ORM(Eloquent / Query Builder)で書くとこうなります。
php
// Query Builder 版
$stats = Friend::where('bot_id', $botId)
->where('created_at', '>=', $startDate)
->selectRaw('DATE(created_at) as date, COUNT(*) as count')
->groupBy(DB::raw('DATE(created_at)'))
->orderByDesc('date')
->get();どちらも同じ結果を返します。どちらを採用しますか?
Phase 2: 判断
AI禁止ゾーン
- AI 生成の
DB::select()コードに セキュリティ上の問題 はありますか? - Query Builder 版にも
DB::raw()が使われています。これは 安全 ですか? - 「生 SQL は全てダメ」は 正しい判断 ですか?
AIに聞く前に、自分の頭で考えてみましょう。
テキストを入力すると有効になります