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 * fromusers
在哪里存在(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距离,其中users
。location_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
为空)”,
答案 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