相关疑难解决方法(0)

如何将参数绑定到模型中使用的Laravel中的原始数据库查询?

回覆,

我有以下查询:

$property = 
    Property::select(
        DB::raw("title, lat, lng, ( 
            3959 * acos( 
                cos( radians(:lat) ) * 
                cos( radians( lat ) ) * 
                cos( radians( lng ) - radians(:lng) ) + 
                sin( radians(:lat) ) * 
                sin( radians( lat ) ) 
            ) 
        ) AS distance", ["lat" => $lat, "lng" => $lng, "lat" => $lat])
    )
    ->having("distance", "<", $radius)
    ->orderBy("distance")
    ->take(20)
    ->get();
Run Code Online (Sandbox Code Playgroud)

它不起作用:Invalid parameter number: mixed named and positional parameters.

有没有人知道一个技巧或解决方法(我显然可以编写完整的查询,但更喜欢使用流利的构建器).

php mysql pdo laravel laravel-4

49
推荐指数
3
解决办法
6万
查看次数

Laravel Eloquent/Query Builder中LEFT JOIN的ON子句中的参数化查询绑定

假设我想显示一个完整的奖项列表,其中type ="color":

Awards        Type     2013 Winner
======        ====     ===========
Blue Award    color       Tom
Red Award     color
Green Award   color       Dan  
Run Code Online (Sandbox Code Playgroud)

为了达到这个结果,我可以在Laravel中查询如下:

$year = '2013';

$awards = DB::table('awards')
             ->leftJoin('winners', function($join) use ($year)
                   {
                        $join->on('awards.id','=','winners.award_id');
                        $join->on('winners.year','=',DB::raw("'".$year."'"));
                   }
             ->where('awards.type','color')
             ->get();
Run Code Online (Sandbox Code Playgroud)

如果输出Laravel生成的SQL,您将看到只有WHERE子句被参数化,并且如果从不受信任的源获取它,则ON子句中的$ year 容易受到sql注入的攻击.此外,查询的缓存潜力也会降低,因为$ year会经常更改.注意:如果您认为我只是将第二个左连接条件添加到查询的WHERE,则 这些不一样.

有关如何获取查询的$ year部分的任何想法参数化?

php parameterized-query laravel eloquent laravel-4

4
推荐指数
1
解决办法
3059
查看次数

标签 统计

laravel ×2

laravel-4 ×2

php ×2

eloquent ×1

mysql ×1

parameterized-query ×1

pdo ×1