使用通配符将未知数量的关键字绑定到SQL语句



我想将关键字绑定到如下SQL查询:

SELECT `field_1`, `field2` FROM `table` WHERE 
`field_1` LIKE '%keyword1%' 
OR `field_1` LIKE '%keyword2%'
OR `field_1` LIKE '%keyword3%'

注意,关键字的数量不是预先确定的。事实上,它是由数组决定的,数组本身是由用户在空间上的输入爆炸决定的。

我正在使用Laravel 7。因此,我正在寻找一个与Laravel 7和PDO一致的解决方案。问题是,我不能在SQL语句中使用'%?%',因为那样我就无法将数组中的值绑定到它

我相信应该有一个解决方案,因为这似乎是编写简单搜索引擎的常见问题,但我自己找不到。

关于您的示例查询,您需要将%添加到值中,而不是添加到语句中,因此如下所示:

WHERE foo LIKE ? OR foo LIKE ?

然后将值传递为"%$var1%""%$var2%"

使用Laravels查询生成器

确保所有搜索词都在一个数组中。然后,您可以在Laravels(您提到您正在使用(查询生成器中执行以下操作:

$searchWords = ['val1', 'val2', 'val3'];
// Now get the query builder and pass closure as the argument
$query = DB::table('some-table')
->where(function($query) use ($searchWords) {
// Iterate through the words and add them one by one
foreach ($searchWords as $word) {
$query->orWhere('field', 'LIKE', "%{$word}%");
}
});
$result = $query->get();

最新更新