Laravel MySql语法错误或访问冲突

时间:2018-09-05 18:41:36

标签: php mysql laravel

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`))))';
}

输出:

  

“消息”:“ SQLSTATE [42000]:语法错误或访问冲突:1064您的SQL语法有错误;请查看与您的MySQL服务器版本相对应的手册,以在'*,(附近使用正确的语法6371 * acos(cos(弧度(28.392200))\ n * cos(弧度(lat))\ n * cos(ra'在第1行(SQL:select * from users在哪里存在(select *,*,(6371 * acos(cos(弧度(28.392200))\ n * cos(弧度(lat))\ n * cos(弧度(lng)\ n-弧度(77.320801) )\ n + sin(radians(28.392200))\ n * sin(radians(lat)))))与locations的AS距离,其中userslocation_id = {{ 1}}。locations和(6371 * acos(cos(弧度(28.392200))\ n * cos(弧度(id))\ n * cos(弧度(lat)\ n-弧度(77.320801))\ n + sin(弧度(28.392200))\ n * sin(弧度(lng))))<8.04672由lat asc)和distance排序。users为空)”,

2 个答案:

答案 0 :(得分:0)

首先,如果您在此平台上寻求帮助,下一次尝试将其表达得更像一个问题。

第二,直接在查询中集成变量从来不是一个好主意。这将使您的查询对于sql注入很容易受到攻击。基本信息here

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

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

答案 1 :(得分:0)

最好将您的方法命名为scopeRsine()。 但是不要为此使用mysql。使用php代替。在此处查看我的回复:https://stackoverflow.com/a/50040011/1262144