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

Laravel Query Builder用CONCAT实现姓名模糊查询语法错误如何解决?

错误原因排查

  • 多余的SELECT关键字:select()方法本身会自动拼接SQL的SELECT前缀,你在DB::raw()里又加了一次SELECT,导致最终SQL出现select SELECT ...的语法错误
  • where()参数结构错误:你把LIKE运算符和搜索值都写到了DB::raw()的入参括号里,参数拆分错误导致查询构造器无法识别条件,所以最终生成的SQL里出现了不符合预期的is null判断
  • 语法混用:控制器代码里不能用Blade模板的{{ }}语法输出变量,直接拼接SQL字符串还会带来SQL注入风险
  • 拼接规则不符:你原生SQL里是用空格拼接姓和名,但是Laravel代码里写的是用逗号拼接,逻辑和需求不一致

可行实现代码

首先确保你已经在控制器顶部引入了DB门面:

use Illuminate\Support\Facades\DB;

修改后的业务代码:

public function getStudent(Request $request)
{
    // 先校验参数合法性
    $validated = $request->validate([
        'terms' => 'required|string'
    ]);

    $students = Student::select(DB::raw("CONCAT(FirstName, ' ', LastName) AS FullName"))
        ->whereRaw(
            "CONCAT(FirstName, ' ', LastName) LIKE ?",
            ["%{$validated['terms']}%"]
        )
        ->get();

    return response()->json($students);
}

优化说明

这里用whereRaw带参数绑定的写法,所有用户输入的参数都会由Laravel自动做转义处理,完全避免SQL注入风险,比直接拼接字符串更安全。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 17:06:07