使用Eloquent Where逃离Laravel DB:raw查询

crabbly

如何使用Eloquent在Laravel中转义以下查询:

$someCollection->where(DB::raw("CONCAT(`field1`, ' ', `field2`)"), 'LIKE', "%".$user_input."%");

我想知道Eloquent的where方法是否在转义$user_input参数,即使这样使用也是DB::raw如此。有任何想法吗?

阶梯

简短的答案是,是的,传递给where()Model或Eloquent Collection上调用的第3个参数将绑定到查询中,这将使其逃逸以防止注入攻击。

在后台,查询生成器不会对您的第3个参数进行任何不同的处理,具体取决于您为第1个参数传递的内容。因此,如果您将原始Expression作为第一个查询或列名传递,对Laravel来说都很好,它只会在构造WHERE子句时使用该值。如果您省略一个运算符作为第二个参数,那也很好,因为传递两个参数而不是3个参数就像传递一个=for运算符一样。

当Laravel将查询提交到数据库时,它实际上将如下所示:

select * from `table_name` where CONCAT(`field1`, ' ', `field2`) LIKE ?

然后,Laravel(从技术上讲是PDO)将您提交的值替换为?占位符。结果,您传递的任何值都将自动为您绑定和转义。

现在,有了转义%,就不必担心运算符了,因为PDO将不理它们,并且您的LIKE子句将匹配其中field1,空格和field2的串联包含用户在其中任何位置提供的字符串的任何行。 。

您可以通过仅传递一个"字符作为输入来进行测试如果不进行转义,查询将引发错误,但是由于已转义,因此脚本可以正常运行-尽管它可能不返回任何结果。

希望对您有所帮助!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用Laravel Eloquent创建多个Where子句查询?

使用DB :: raw和Eloquent使用同一查询的不同结果

如何使用Laravel Eloquent创建子查询?

将参数绑定到Db :: raw laravel查询

在Eloquent / Laravel中使用子查询

使用DB :: raw在Laravel Eloquent select中获取驼峰式别名

Laravel雄辩的查询范围与使用DB :: raw的联接

Laravel-使用DB :: raw()查询的联接中的其他条件

Laravel Eloquent在我的搜索系统请求中使用orWhere查询

进行子查询以使用Laravel Eloquent检索属性的答案

如何在Laravel Eloquent中调用DB函数并使用分页?

讨论:Laravel Eloquent VS DB查询附加

为什么在Laravel中在DB :: select中使用DB :: raw?

如何使用车把js逃离laravel 4.2中的html?

使用DB :: Raw的安全laravel查询

Laravel> 使用 Eloquent 查询多对多关系

使用 Laravel 的 Eloquent 进行查询构建

Laravel Eloquent 选择查询使用的付款方式

Laravel Eloquent - 使用关系构建“where not”查询

如何使用 Laravel eloquent 优化循环查询

Eloquent 查询不使用 where/first 条件。为什么?

如何在 Laravel 5.8 中使用 Eloquent 进行查询?

如何使用 Eloquent / Laravel 执行此查询:使用 GROUP BY 子查询 WHERE IN

使用 laravel eloquent 创建子查询

DB:Raw 中的 Laravel 子查询(选择)

使用 Eloquent 的 Laravel 查询构建器

Laravel MS SQL DB::RAW 查询返回“无效的列名”

Laravel DB 查询 WHERE 日期大于不使用 JOIN

Laravel Eloquent - 仅使用 Eloquent 选择所有列和子查询