【发布时间】:2017-04-12 06:04:35
【问题描述】:
我在一个项目中使用 Laravel 5.1 和 Eloquent ORM。我需要查询数据库以查找使用他们的姓名或部分姓名的人。
如果一个人叫 John Doelington,我希望所有搜索词 john、doelin、john doe 都能找到那个 John Doelington。但是,名字和姓氏存储在不同的列中。目前我正在使用这个查询:
$people = Person::whereRaw(
'CONCAT(first_name, \' \', last_name)
LIKE \'%'.$search.'%\'')
->get();
查看日志,我发现很多错误 - 每次出现 ' 符号时都会中断查询。看来我在 whereRaw() 函数的安全区之外,有人可以通过上帝知道什么给 SQL。
我应该在这里做什么?
我应该手动清理输入吗?如果是这样,我该怎么办?删除' 还有什么?如果查询实际上必须包含' 符号怎么办?
也许有更安全的方法来执行此查询?使用whereRaw()时,是否可以使用Eloquent但传递参数以PDO样式查询?
如果有区别,我将使用 MySQL 作为数据库。
我知道我可以为全名创建一个连接列,但是在使用此后备之前,我正在寻找一个 Eloquent 解决方案。
【问题讨论】: