给定以下代码:
$sql = "SELECT * FROM items WHERE name LIKE '%?%'";
$key = 'orange';
$result = \DB::select(\DB::raw($sql), [$key]);
结果总是没有记录!
虽然通过将 LIKE
更改为 =
,它工作正常:
$sql = "SELECT * FROM items WHERE name = ?";
我不知道为什么会这样,但我必须在此脚本中使用RAW。任何人都可以找出问题出在哪里吗?
最佳答案
你没有理解绑定(bind)是如何工作的......绑定(bind)不仅处理值中的引号和其他特殊字符,还处理引号
$sql = "SELECT * FROM items WHERE name LIKE ?";
$key = '%orange%';
$result = \DB::select(\DB::raw($sql), [$key]);
并在绑定(bind)之前记下 $key
值周围的 %
关于php - 包含通配符参数时,Laravel 原始表达式不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42149700/