Laravel Eloquent 中 whereRaw('age>?', [25]) 与 whereRaw("age>{$_GET['age']}") 的区别是什么?
User::whereRaw('age > ?', [25])->get();
// vs
User::whereRaw("age > {$_GET['age']}")->get();
应该使用哪一种?为什么?
感觉挺像sql注入的问题,我支持第一种。第二种我可以做一个 ?age = "(select id from admin_user where id = 1);update admin_user set deleted = 1 where id = 1;"
这样可以避免注入吧
应该使用第一种,防止 SQL 注入。
第一种使用了参数绑定,不论传入什么参数,都会被转换为字符串形式,避免了在解析 SQL 语句时运行前端恶意传过来的 JS、 SQL 等攻击脚本。
Laravel 在 ORM 查询中已经解决了这个问题,但是在使用
Raw()
原生方法时,需要注意使用参数绑定。当然是第一种喽
老sql注入了
肯定第一种了,Raw() 第二个参数叫bindings 就知道是使用pdo的占位符了
我会反问面试官,为什么不用
User::where('age','>',$age)->get();
,大不了就是回家等通知嘛 :smile:whereRaw 我一般是用在那种必须使用原生 sql 的场景,比如根据不同条件修改不同的值