Laravel:在查询中使用WHERE CONCAT

时间:2016-11-04 02:19:31

标签: mysql laravel concat

我对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.'")'))


有人可以帮忙指出我该怎么做呢? 非常感谢。

2 个答案:

答案 0 :(得分:1)

在查询生成器中使用RAW方法时要小心,因为它很容易进行SQL注入。我建议将“admin_id”和“password”的串联分开,并使用标准的WHERE方法来避免这个问题。

答案 1 :(得分:0)

我知道您已经解决了这个问题,但如果您不想逃避用户输入,那么您的解决方案可以为SQL注入提供可能性。 解决这个问题的一种方法是添加绑定。

UserMainTbl::where('username', '=', $username)
  ->where('hashkey', '=',DB::raw('concat(admin_id,"?")'))
  ->addBinding($password);

https://laravel.com/docs/5.3/queries#raw-expressions