You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel:如何用Query Builder替代原生参数化SQL并绑定参数

解决方案

在Laravel Query Builder中,你可以通过where方法直接添加条件,框架会自动完成参数化绑定,不需要手动写:pid这类占位符。

修改后的完整代码如下:

$objects = DB::table('projects', 'p')
    ->select(
        'o.id AS oid',
        'o.name AS name',
        'o.fields AS fields'
    )
    ->join('tasks as t', 't.project_id', '=', 'p.id')
    ->leftJoin('commands as c', 'c.task_id', '=', 't.id')
    ->leftJoin('objects as o', 'o.id', '=', 'c.object_id')
    // 添加WHERE条件,Laravel自动处理参数化
    ->where('p.id', $row->pid)
    ->groupBy(['o.id', 'o.name'])
    ->orderBy('o.name')
    ->get(); // 调用get()执行查询并获取结果集

补充说明

  1. 参数化安全:直接传入$row->pid即可,Laravel会自动将其转换为参数化查询,和原生SQL里的:pid绑定效果完全一致,能有效防止SQL注入。
  2. 简化写法:如果是等于条件,可省略第三个参数,直接写成->where('p.id', $row->pid),默认就是等于操作。
  3. 手动指定占位符(可选):如果一定要用命名占位符的写法,也可以用whereRaw:
->whereRaw('p.id = :pid', ['pid' => $row->pid])

不过这种写法没必要,普通的where方法已经足够简洁安全。

内容的提问来源于stack exchange,提问作者vbulash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 16:25:03