如果使用whereRaw(),我应该如何清理Laravel查询?

Džu*_*ris 2 laravel eloquent

我在一个项目中使用Laravel 5.1和Eloquent ORM.我需要查询数据库以查找使用其名称或部分名称的人员.

如果一个人被命名为约翰Doelington,我希望所有的搜索字词john,doelin,john doe发现约翰Doelington.但是,名字和姓氏存储在不同的列中.目前我正在使用此查询:

$people = Person::whereRaw(
                     'CONCAT(first_name, \' \', last_name) 
                      LIKE \'%'.$search.'%\'')
                 ->get();
Run Code Online (Sandbox Code Playgroud)

查看日志我发现很多错误 - 每次有'符号时都会破坏查询.似乎我在安全区之外有whereRaw()功能,有人可以通过上帝知道SQL的内容.

我该怎么办?

我应该手动清理输入吗?如果是这样,我该怎么办?删除'和还有什么?如果查询实际上必须包含'符号怎么办?

也许有一种更安全的方式来执行此查询?我可以使用Eloquent但是在使用时传递参数以PDO样式进行查询whereRaw()吗?

如果它有所不同,我使用MySQL作为数据库.

我知道我可以为全名创建一个连接列,但是我在使用此回退之前首先寻找一个Eloquent解决方案.

Ami*_*pta 6

源代码中可以清楚地看到,whereRaw第二个参数接受数组绑定,因此您可以将查询编写为:

$search = "%{$search}%";
$people = Person::whereRaw("(CONCAT(first_name,' ',last_name) like ?)", [$search])
                 ->get();
Run Code Online (Sandbox Code Playgroud)

您也可以尝试全文搜索.