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

Laravel查询报MariaDB语法错误 near ') < Now()' 如何解决?

问题解决方法

1 核心SQL报错修复

触发SQL语法错误的原因是whereRaw语句中INTERVAL的写法不符合MariaDB规范:MariaDB/MySQL中INTERVAL后的数值和单位不需要包裹单引号,代码里写的INTERVAL '1 DAY'加了单引号导致SQL解析失败。

两种正确写法可选:

  • 直接修正INTERVAL语法
public function view()
{
    $failed = DB::table('house')
        ->where('isoccupied', 0)
        ->whereRaw("(currentdatasync + INTERVAL 1 DAY) < NOW()")
        ->count('*');

    return view('admin.dashboard')->with('failed', $failed);
}
  • 用DATE_ADD函数写法,兼容性和可读性更高
public function view()
{
    $failed = DB::table('house')
        ->where('isoccupied', 0)
        ->whereRaw("DATE_ADD(currentdatasync, INTERVAL 1 DAY) < NOW()")
        ->count('*');

    return view('admin.dashboard')->with('failed', $failed);
}

2 额外注意:compact写法错误修正

之前修改的compact($failed)写法本身存在错误,虽然这不是触发SQL报错的原因,但会导致视图无法正常接收变量:
compact()函数接收的参数是变量名的字符串形式,而非变量本身,正确写法为compact('failed'),对应返回语句如下:

return view('admin.dashboard')->with(compact('failed'));

原本的->with('failed', $failed)写法没有问题,不需要额外修改。

3 验证方法

修改后可临时输出生成的SQL语句确认语法正确:

dd(
    DB::table('house')
        ->where('isoccupied', 0)
        ->whereRaw("DATE_ADD(currentdatasync, INTERVAL 1 DAY) < NOW()")
        ->toSql()
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 19:18:03