Laravel MySql语法错误或访问冲突

问题描述 投票:-1回答:2
public static function rsine($coordinates)
{
    return '(6371 * acos(cos(radians(' . $coordinates['latitude'] . ')) 
    * cos(radians(`lat`)) 
    * cos(radians(`lng`) 
    - radians(' . $coordinates['longitude'] . ')) 
    + sin(radians(' . $coordinates['latitude'] . ')) 
    * sin(radians(`lat`))))';
}

输出:

“message”:“SQLSTATE [42000]:语法错误或访问冲突:1064您的SQL语法中有错误;请查看与您的MySQL服务器版本对应的手册,以便在'*附近使用正确的语法,(6371 * acos (cos(弧度(28.392200))\ n * cos(弧度(lat))\ n * cos(第1行的ra'(SQL:select * from users where exists(select *,*,(6371 * acos(cos((弧度(28.392200))\ n * cos(弧度(lat))\ n * cos(弧度(lng)\ n - 弧度(77.320801))\ n + sin(弧度(28.392200))\ n * sin(弧度(lat) ))))距离locations的距离users.location_id = locations.id和(6371 * acos(cos(弧度(28.392200))\ n * cos(弧度(lat))\ n * cos(弧度(lng)\ n - 弧度(77.320801))\ n + sin(弧度(28.392200))\ n * sin(弧度(lat))))<8.04672顺序由distance asc)和users.deleted_at为空)“,

php mysql laravel
2个回答
0
投票

首先,如果你在这个平台上寻求帮助,下次尝试制定更像是一个问题。

其次,直接在您的查询中集成变量永远不是一个好主意。这将使您的查询可以进行sql注入。基础知识可以找到here

通过查看您的查询(在错误中),我们可以看到您将使用*通配符两次获取所有列。

select
    *
from
    users
where
    exists (
        select
            *,
            *, <-- This will throw a syntax error.
            (6371 * acos(co ... the rest of the distance calculation

0
投票

将方法命名为scopeRsine()会很好。但是不要为此使用mysql。请改用php。在这里查看我的回复:https://stackoverflow.com/a/50040011/1262144

© www.soinside.com 2019 - 2024. All rights reserved.