2017-02-10 41 views
2

時不工作考慮下面的代碼:Laravel原始表達式包含通配符參數

$sql = "SELECT * FROM items WHERE name LIKE '%?%'"; 
$key = 'orange'; 
$result = \DB::select(\DB::raw($sql), [$key]); 

結果始終沒有記錄!

,同時通過改變LIKE=,它工作正常:

$sql = "SELECT * FROM items WHERE name = ?"; 

我不知道爲什麼發生這種情況,但我使用RAW在此腳本。任何人都可以弄清楚問題在哪裏?

回答

1

你不理解怎麼綁定工作...結合不僅可以處理報價和值中的其他特殊字符,而且處理引用

$sql = "SELECT * FROM items WHERE name LIKE ?"; 
$key = '%orange%'; 
$result = \DB::select(\DB::raw($sql), [$key]); 

和前注意周圍的$key%你綁定它

+0

它現在的作品!謝謝。 – William

+1

在這種情況下,您不需要在DB :: select中使用'DB :: raw'。後者已經具有運行原始sql的能力,所以你可以這樣做:'DB :: select($ sql,[$ key]);' –

相關問題