php - laravel sql 查询中的语法错误

标签 php mysql sql database laravel

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

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

我想获取它周围指定半径内的所有结果。

这就是我得到它的方式:

    $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]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'long ) - radians(?) ) + sin( radians(?) ) * ' at line 4 (SQL: select *, ( 6371 * acos( cos( radians(51,3) ) * cos( radians( lat ) ) * cos( radians( long ) - radians(4,3) ) + sin( radians(51,3) ) * sin( radians( lat ) ) ) ) AS distance from hamsters having distance < 5 order by distance asc)

有人有办法解决这个问题吗?

最佳答案

Long是mysql中的保留关键字source

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

关于php - laravel sql 查询中的语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26873186/

相关文章:

php - 通过POST方法将复选框数据插入mysql数据库

python - Django Model.objects.all() 返回意外的空 QuerySet

php - MySQL 从特定列进行 SELECT 查询

mysql CURRENT_TIMESTAMP 给我全部 0

php - 错误 1146 : table '#__content' doesn't exist' in mysql Phpmyadmin

php - 提交后如何将 JS 变量传递给同一 PHP 文件中的后续 PHP?

php - Symfony3 无法使用服务中的路由器创建已翻译的路由

php - 添加子类别 - Laravel 5.2

php - 使用 mysqli 运行多个查询

sql - PostgreSQL 索引性能增益/损失在短时间后生效