"SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1064В вашей SQLsyntax есть ошибка; - PullRequest
0 голосов
/ 24 июня 2019

У меня проблема в LARAVEL Я хочу сделать выбор телефонов и после заполнения формы. Итак, у меня есть жанр (телефон, планшет), марка (samsung, oppo ...) и тип (S10 +, S3S ...), и я хочу передать марку и параметр пола для заполнения формы. но когда я иду показать парню, это вызывает у меня проблему.

Контроллер:

public function affiche(){
    $listgenre = DB::select('select distinct genre_mobile from mobiles');
    return view('reparation.reparation', ['mobiles' => $listgenre]);
}

//affiche la page des marques après le genre 
public function affichemarque($genre){
    $listmarque = DB::select('
                    select distinct marque_mobile , genre_mobile from mobiles where genre_mobile = ?', [$genre]); 
    return view('reparation.marque', ['mobiles' => $listmarque]);
}

//Affiche Type of mobile après la marque
public function affichetype($genre, $marque){
$listtype = DB::select('select * from mobiles where genre_mobile = '.$genre.'and marque_mobile='.$marque);
    return view('reparation.type', ['mobiles' => $listtype]);
}

маршруты:

Route::get('reparation/rep', 'AppController@affiche'); //page choix telephone or tablette

Route::get('reparation/{genre}/marque', 'AppController@affichemarque'); //choix des marques (samsung, oppo, apple ...)

Route::get('reparation/{genre}/{marque}/type', 'AppController@affichetype'); //type( S3, S10+, s70 ...)

Проблема:

"SQLSTATE [42000]: синтаксическая ошибка или нарушение доступа: 1064 У вас есть ошибка в вашем синтаксисе SQL; проверьте руководство, которое соответствует вашему Версия сервера MariaDB для правильного синтаксиса для использования рядом 'marque_mobile = SAMSUNG' в строке 1 (SQL: выбрать * с мобильных телефонов, где genre_mobile = phoneand marque_mobile = SAMSUNG) ◀ "

1 Ответ

0 голосов
/ 24 июня 2019
SQL: select * from mobiles where genre_mobile = telephoneand marque_mobile=SAMSUNG

если вы хорошо прочитаете SQL-запрос, вы увидите, что вам нужно добавить пробел между AND и marque_mobile

$listtype = DB::select('select * from mobiles where genre_mobile = '.$genre.' and marque_mobile = '.$marque);

, чтобы избежать этих ошибок, всегда пишите ключевые слова в верхнем регистре и пытайтесь объединить, используя этот метод или используя именованные привязки:

$listtype = DB::select("SELECT * FROM mobiles WHERE genre_mobile = {$genre} AND marque_mobile = {$marque}" );
$listtype = DB::select("SELECT * FROM mobiles WHERE genre_mobile = :genre AND marque_mobile = :marque",['genre' => $genre, 'marque' => $marque]);

Кроме того, я советую вам использовать Eloquent, его лучше читать, и вы избегаете написания больших SQL-запросов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...