Skip to content

Eloquent vs 生 SQL ― AI 生成の raw query を採用するか?

📖この章のキーワード
用語意味なぜ重要か
SQL インジェクションユーザー入力を通じて不正な SQL を実行させる攻撃データ漏洩やDB破壊の原因
パラメータバインディング値を SQL とは別に送る仕組み値が SQL として解釈されることを防ぐ
EloquentLaravel の 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に聞く前に、自分の頭で考えてみましょう。

テキストを入力すると有効になります