我对laravel很新,并且在使用CONCAT构建查询时遇到了问题:
#From input
$password = $request->password;
#sql statement
UserMainTbl::where('username', '=', $username)->whereRaw('hashkey', '=', CONCAT('admin_id'.$password))
表:UserMainTbl
字段:用户名,hashkey,admin_id
收到错误:
调用未定义的函数App \ Http \ Controllers \ Auth \ CONCAT()
------
更新:
我更改了我的代码并设法停止上述错误。但是得到了新的错误。
->where('hashkey', '=', DB::raw('concat(admin_id,"$password")'))
未找到列:1054未知列'密码123'在' where子句' (SQL:select * from
user_main_tbl
其中username
= xxx和hashkey
= concat(admin_id,password123)限制1)
------
更新[解决] :
我对这个不好。它只是一个简单的字符串。如果有的话,这是未来参考的解决方案。洛尔:
->where('hashkey', '=', DB::raw('concat(admin_id,"'.$password.'")'))
有人可以帮忙指出我该怎么做呢?
非常感谢。
答案 0 :(得分:1)
在查询生成器中使用RAW方法时要小心,因为它很容易进行SQL注入。我建议将“admin_id”和“password”的串联分开,并使用标准的WHERE方法来避免这个问题。
答案 1 :(得分:0)
我知道您已经解决了这个问题,但如果您不想逃避用户输入,那么您的解决方案可以为SQL注入提供可能性。 解决这个问题的一种方法是添加绑定。
UserMainTbl::where('username', '=', $username)
->where('hashkey', '=',DB::raw('concat(admin_id,"?")'))
->addBinding($password);