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

Laravel中按全名搜索用户CONCAT拼接字段报SQL语法错误如何解决

问题解决方法

报错原因

你当前的SQL语法错误源于LIKE匹配的通配符%位置错误:生成的SQL语句中%放在了字符串单引号的外侧,不符合MariaDB/MySQL的语法规范,所以触发1064语法错误。

修复方案

方案1:快速修复(不推荐,存在SQL注入风险)

仅调整通配符的位置,将%放到单引号内部即可:

->whereRaw('CONCAT(first_name," ",last_name) LIKE \''.$fullName.'%\'');

如果需要前后模糊匹配,调整为:

->whereRaw('CONCAT(first_name," ",last_name) LIKE \'%'.$fullName.'%\'');

方案2:参数绑定写法(推荐,安全无SQL注入风险)

使用Laravel查询构造器自带的参数绑定能力,避免手动拼接字符串带来的安全问题:

// 前缀匹配:仅匹配全名以搜索内容开头的用户
->whereRaw('CONCAT(first_name, " ", last_name) LIKE ?', ["{$fullName}%"]);

// 全模糊匹配:匹配全名任意位置包含搜索内容的用户
->whereRaw('CONCAT(first_name, " ", last_name) LIKE ?', ["%{$fullName}%"]);

完整的修改后代码示例:

$users = User::where(function($usersSearchQuery) use ($user,$fullName){
    $usersSearchQuery
        ->whereNotIn('id', $user->blockerUsers->pluck('blocked_id'))
        ->whereNotIn('id', $user->blockedUsers->pluck('blocker_id'))
        ->whereRaw('CONCAT(first_name, " ", last_name) LIKE ?', ["%{$fullName}%"]); 
})->get();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 17:30:01