laravel条件

i1icjdpr  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(359)

我在工作的项目,我需要按距离(通过使用纬度和经度)订购我的广告对此我想让用户abl限制广告的数量,通过ginving的最大距离为例:如果用户只想得到他旁边100英里的广告,所以我订购的广告,并返回他只是广告,他们是离他不到100英里的地方,我做了一些工作,做了一些广告,但我不知道如何继续

public function get_searched(Request $request){
    $annonce=DB::table("annonces")
            ->where('nomAnnonce','like','%'.$request->input("nomAnnonce").'%')
            ->orderBy(
    DB::raw('3959 * acos( cos( radians('.$request->input("lat").') ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians(-'.$request->input("lon").') ) + sin( radians('.$request->input("lat").') ) * sin(radians(latitude)) )')
    ,'desc')  
           ->get();

    echo $annonce;
}

如果有人能帮我找出为什么要限制最大距离

3okqufwl

3okqufwl1#

使用此选项:

$annonce = DB::table("annonces")
    ->select('annonces.*')
    ->selectRaw('3959 * acos( cos( radians(?) ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians(-?) ) + sin( radians(?) ) * sin(radians(latitude))) distance',
        [$request->input('lat'), $request->input('lon'), $request->input('lat')])
    ->where('nomAnnonce', 'like', '%'.$request->input("nomAnnonce").'%')
    ->orderBy('distance', 'desc')
    ->having('distance', '<=', $request->input('max'))
    ->get();

正如devon指出的,使用未过滤的用户输入是非常危险的(sql注入)。

相关问题