2017-02-10 49 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]);' –