2017-09-25 156 views
0

我想知道什麼時候在laravel query builer中使用查詢生成器中的原始查詢,如下所示。原始查詢內部查詢生成器可以使用laravel查詢生成器保護sql注入?

$salesdata = DB::table('HEADER') 
       ->join('BRANCH', 'HEADER.BRANCHCODE', '=', 'BRANCH.BRANCHCODE') 
       ->select('HEADER.BRANCHCODE','BRANCH.BRANCHNAME', 
        DB::raw('SUM("HEADER"."AMT") as netamt'), 
        DB::raw('SUM("HEADER"."AMT") + SUM("HEADER"."DISCOUNT")- SUM("HEADER"."TAX1")- SUM("T_CASH_HEADER"."TAX2") as grossamt'),'BRANCH.BRANCHNAME', 
        DB::raw('SUM("HEADER"."COVER") as NetCover'), 
        DB::raw('SUM("HEADER"."DISCOUNT") as discount'),DB::raw('SUM("HEADER"."TAX1") as tax'),DB::raw('round(SUM("HEADER"."AMT")/SUM("HEADER"."COVER"),2) as avg')) 
       ->whereBetween('HEADER.INVOICEDATE', [$fromDate, $toDate]) 
       ->groupBy('BRANCH.BRANCHCODE','BRANCH.BRANCHNAME','HEADER.BRANCHCODE') 
       ->orderBy('AMT','ASC') 
       ->get(); 

我想知道上面的查詢可以確定使用laravel進行sql注入。

+0

你必須看看laravel的源代碼,看看它給你的變量做了什麼。希望它參數化他們。 – ADyson

回答

1

不,您沒有將任何用戶輸入傳遞到您的select語句,只有在->whereBetween('HEADER.INVOICEDATE', [$fromDate, $toDate])語句中,並且這將使用PDO參數綁定來防止SQL注入。所以,這是安全的!

+0

如果他還事先驗證了使用DateTime類的字符串,他會確定輸入是安全的 – delboy1978uk

+0

謝謝xo much .. –