2015-07-29 5 views
5

Ich bin ein String-Parameter empfängt, die Ich mag würde havingRaw verwenden mit:Laravel 5.1 Eloquent Escape-String-Parameter (havingraw)

Zeichenfolge Ich erhalte:

$searchString = Input::get('q');//example:party beach 

i in andere Frage gefunden zu haben, i sollte diese sQL-Injection zu verhindern verwenden:

$searchStringEsc = DB::connection()->getPdo()->quote($searchString); 

das Problem, das ich habe, ist, wenn ich in meiner Anfrage mit havingRaw einsetzen, da mein String entkommen ist jetzt `Partei Beach` es null zurück , aber wenn ich die nicht-maskierte Zeichenfolge einfüge, funktioniert es einwandfrei.

->havingRaw('search rlike replace("'.$searchStringEsc.'", " ", "|")') 

Gibt es eine andere Möglichkeit, um unbearbeitete Parameter zu umgehen? danke

EDIT-- Voll Query (i eine Suchanfrage mache, wo der Benutzer in Stadtname, Name des Etablissements setzen, markiert alle Tags an die Einrichtung etc ...)

  $results = DB::table('events') 
      ->leftJoin('event_tag', 'events.id', '=', 'event_tag.event_id') 
      ->join('tags', 'tags.id', '=', 'event_tag.tag_id') 
      ->join('establishments', 'establishments.id', '=', 'events.establishment_id') 
      ->join('cities', 'establishments.city_id', '=', 'cities.id') 
      ->leftJoin('artist_event', 'events.id', '=', 'artist_event.event_id') 
      ->join('artists', 'artist_event.artist_id', '=', 'artists.id') 
      ->leftJoin('event_music', 'events.id', '=', 'event_music.event_id') 
      ->join('musics', 'musics.id', '=', 'event_music.music_id') 
      ->select('events.id as evId', 'events.slug as evSlug', 'events.name as evName', 
       'events.cover_path as estPath','establishments.establishment_type_id as estType', 
       'establishments.name as estName', 'events.start_date as evStart', 'events.end_date as evEnd', 
       'cities.name as ciName', 
       DB::raw('CONCAT_WS(",", 
         GROUP_CONCAT(distinct tags.name), 
         GROUP_CONCAT(distinct artists.name), 
         GROUP_CONCAT(distinct cities.name), 
         GROUP_CONCAT(distinct events.name), 
         GROUP_CONCAT(distinct musics.name) 
         ) as search')) 
      ->where('events.end_date','>=', DB::raw('NOW()')) 
      ->where('establishments.is_active','=',1) 
      ->groupBy('events.id') 
      ->havingRaw('search rlike replace("'.$searchString.'", " ", "|")') 
      ->orderBy('events.total_visited', 'desc') 
      ->take(5)->get(); 

wenn Ich lasse es als $ searchString (unscaped String), es funktioniert gut. , wenn ich es auf $ searchStringEsc (Escape-Sequenzen) ändern zurückgeben null

+0

ist es mitRoh oder whileRaw ?? –

+0

hasingRaw, weil ich einen Alias ​​in meiner Select-Abfrage verwende – Carlos

+0

Können Sie die vollständige Abfrage posten? Verwenden Sie Aggregationsfunktionen? – alariva

Antwort

1

Sie können einfach Abfragebindung, verwenden so ersetzen

->havingRaw('search rlike replace("'.$searchString.'", " ", "|")') 

mit

->havingRaw('search rlike replace(?, " ", "|")', [$searchString]) 

, die alle Ihre Flucht Bedürfnisse Griffe (whereRaw kann das auch tun). Die ? bedeutet nur, dass Sie einen gebundenen Parameter (nämlich $searchString) dort haben.