假设我想显示 type="color" 的完整奖项列表:
Awards Type 2013 Winner
====== ==== ===========
Blue Award color Tom
Red Award color
Green Award color Dan
为了达到这个结果,我可以在 Laravel 中进行如下查询:
$year = '2013';
$awards = DB::table('awards')
->leftJoin('winners', function($join) use ($year)
{
$join->on('awards.id','=','winners.award_id');
$join->on('winners.year','=',DB::raw("'".$year."'"));
}
->where('awards.type','color')
->get();
如果你输出 Laravel 生成的 SQL,你会看到只有WHERE 子句是参数化的,如果我从不受信任的来源获取它,ON 子句中的 $year容易受到 sql 注入的影响。此外,查询的缓存潜力也会降低,因为 $year 会经常更改。注意:如果您认为我只是将第二个左连接条件添加到查询的 WHERE 中, 则它们并不相同。
关于如何将查询的 $year 部分参数化的任何想法?