如何才能在LIKE查询Laravel中找到整个单词?

时间:2018-02-13 06:02:28

标签: php mysql laravel eloquent

如何在Laravel的Eloquent中找到LIKE查询中的整个单词?

例如,如果有人搜索过SA,则可以看到以下结果:LIKE%sa%:

  • 我的名字是Sam
  • 我住在SA

但我需要一个只返回的搜索:

  • 我住在SA

如何在防止SQL注入的同时完成此操作?由于这个原因,我对原始查询非常谨慎 - 除非提供任何替代方案?

谢谢。

1 个答案:

答案 0 :(得分:3)

就个人而言,我会使用REGEXPRLIKE),这会产生以下结果:

$place = 'sa';
$res = DB::select( DB::raw("select * from my_table where place REGEXP '[[:<:]]$place[[:>:]]'") );

但这会通过SQL注入创建一个攻击向量,因此为了清理查询,我们可以执行以下操作:

$place = 'sa';
$results = DB::select( DB::raw("select * from my_table where place REGEXP '[[:<:]]:place[[:>:]]'"), array(
   'place' => $place,
));

select()接受绑定,您可以检查here:)

修改

这是select

的签名
public function select($query, $bindings = [], $useReadPdo = true)