gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 10:27:26 25 4
gpt4 key购买 nike

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

如果一个人的名字叫 John Doelington,我希望所有搜索词 johndoelinjohn doe 都能找到该 John Doelington。但是,名字和姓氏存储在不同的列中。目前我正在使用这个查询:

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

查看日志,我看到很多错误 - 每次出现 ' 符号都会中断查询。看来我在 whereRaw() 函数的安全区之外,有人可以将天知道什么传递给 SQL。

我应该在这里做什么?

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

也许有更安全的方法来执行此查询?在使用 whereRaw() 时,我可以使用 Eloquent 但传递参数以 PDO 风格进行查询吗?

如果有区别的话,我使用 MySQL 作为数据库。

我知道我可以为全名创建一个串联列,但是在使用此后备之前,我首先正在寻找 Eloquent 解决方案。

最佳答案

来自source code ,很明显 whereRaw 的第二个参数接受数组绑定(bind),因此您可以将查询编写为:

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

您还可以尝试Full-Text search .

关于laravel - 如果使用 whereRaw(),我应该如何清理 Laravel 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40845621/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com