laravel 的 sql 查询中的语法错误

Posted

技术标签:

【中文标题】laravel 的 sql 查询中的语法错误【英文标题】:Syntax error in sql query for laravel 【发布时间】:2015-01-08 11:47:36 【问题描述】:

我正在寻找特定点周围的距离。

我的数据库中有这些项目的经纬度。

我想得到它周围指定半径的所有结果。

这就是我得到它的方式:

    $lat = '51,3';
    $long = '4,3';
    $radius = '5';

    $hamsters = Hamster::select(
           DB::raw("*,
                         ( 6371 * acos( cos( radians(?) ) *
                           cos( radians( lat ) )
                           * cos( radians( long ) - radians(?)
                           ) + sin( radians(?) ) *
                           sin( radians( lat ) ) )
                         ) AS distance"))
           ->having("distance", "<", "?")
           ->orderBy("distance")
           ->setBindings([$lat, $long, $lat,  $radius])
           ->get();

现在它给了我一个错误:

SQLSTATE[42000]:语法错误或访问冲突:1064 你有一个 SQL 语法错误;检查与您对应的手册 mysql 服务器版本,用于在 'long 附近使用正确的语法) - 弧度(?))+ sin(弧度(?))*'在第4行(SQL:选择*,(6371 * acos( cos( 弧度(51,3) ) * cos( 弧度( lat ) ) * cos( 弧度( long ) - 弧度(4,3) ) + sin( 弧度(51,3) ) * sin( 弧度(纬度)) ) ) AS 距离hamstersdistance distanceasc)

有人可以解决这个问题吗?

【问题讨论】:

你为什么不-&gt;toSql() 而不是-&gt;get() 并回显它并查看正在生成的查询。 【参考方案1】:

Long是mysql中的保留关键字source

您必须在任何具有相同名称的标签周围使用反引号 (`) 作为解决方法。

【讨论】:

以上是关于laravel 的 sql 查询中的语法错误的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.8:总是给出多个主键语法或访问冲突错误

DAL中的一句sql总是提示'@pagesize'附近有语法错误。

Laravel 5.8 SQLSTATE [42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误

Laravel 的查询构建器 JSON 选择器 `field->key` 导致语法错误

SQLSTATE [42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误 - LARAVEL

Laravel 6 - SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;