2016-11-04 2 views
2

Я довольно новыми для Laravel и столкнулись с проблемой построения запроса с использованием CONCAT:Laravel: с помощью WHERE CONCAT в запросе

#From input 
$password = $request->password; 
#sql statement 
UserMainTbl::where('username', '=', $username)->whereRaw('hashkey', '=', CONCAT('admin_id'.$password)) 

Таблица: UserMainTbl
поля: имя пользователя, hashkey, admin_id

Got ошибка:

Call to undefined function App\Http\Controllers\Auth\CONCAT()

------
Update:
Я меняю свой код и останавливаю вышеуказанную ошибку. Но получить новую ошибку.

->where('hashkey', '=', DB::raw('concat(admin_id,"$password")')) 

Column not found: 1054 Unknown column 'password123' in 'where clause' (SQL: select * from user_main_tbl where username = xxx and hashkey = concat(admin_id,password123) limit 1)

------
Update [Решить]:
Мой плохо на этом. Это просто простая строка. Вот решение для дальнейшего использования, если оно есть. Lol:

->where('hashkey', '=', DB::raw('concat(admin_id,"'.$password.'")')) 


Может кто-то помочь, чтобы указать, как я могу сделать это правильно?
Большое спасибо.

+1

у вас нет функции CONCAT. если вы имеете в виду mysql CONCAT ... тогда эта часть CONCAT должна быть включена внутри одной кавычки. – barudo

+0

Спасибо @barudo за ваш ответ. Я обновляю свой вопрос в соответствии с вашими отзывами. И получил еще одну ошибку. Как заставить пароль стать строкой не как столбец? –

+0

вы можете написать его как '-> где ('hashkey', '=', DB :: raw (" concat (admin_id, '$ password') "))' – jagzviruz

ответ

0

Я знаю, что вы решили проблему, но ваше решение может открыть возможности для SQL Injection, если вы не избежите ввода пользователем. Одним из способов решения этой проблемы является добавление привязки.

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

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

1

Всегда будьте осторожны при использовании RAW метод в построитель запросов, так как он склонен к инъекции SQL. Я предлагаю отделить конкатенацию «admin_id» и «password» и использовать стандартный метод WHERE, чтобы избежать проблемы.

+0

Спасибо @ronald. Вы имеете в виду использование _whereRaw_? –

+0

Вы все еще используете DB :: raw right? :) – Ronald

+0

Да, я все еще использую DB :: raw. –

Смежные вопросы