Contao-Camp 2024
Ergebnis 1 bis 10 von 10

Thema: Datenbankabfrage mit einem X

  1. #1
    Contao-Nutzer Avatar von Spelmann
    Registriert seit
    24.11.2012.
    Ort
    Nördlich von Berlin
    Beiträge
    234

    Standard Datenbankabfrage mit einem X

    Hi,
    ich habe ein Problem bei einer Datenbankabfrage.
    Ich werte eine Suchabfrage aus (Modellsuche unter verschiedenen Verkaufsartikeln)
    PHP-Code:
    SELECT artnr FROM `produktlisteWHERE `modellLIKE "%'.implode('%" AND `modellLIKE  "%', $produktsuche).'%" 
    Funktioniert alles wie erwartet, bis man als Suche so etwas wie "Artikel Soundso XXL" oder "XS Artikel" übergibt. Das X am Anfang irgendeines Wortes der Suchanfrage erzeugt einen Fehler:
    Code:
    Fatal error: Uncaught exception Exception with message Too few arguments to build the query string thrown in system/modules/core/library/Contao/Database/Statement.php on line 331
    Weiter steht da:
    Code:
    #0 system/modules/core/library/Contao/Database/Statement.php(262): Contao\Database\Statement->replaceWildcards(Array)
    Wird ein X unter Contao irgendwie auch als Wildcard in einem SQL-Query verwendet? Und wie kann ich das Problem umgehen?
    Ich habe es ganz plump mal so versucht:
    Code:
    str_replace("X","derHEXA-Code für X",$produktsuche);
    aber das war wohl zu schlicht gedacht. Ich erzeuge dann zwar keinen Fehler, aber ein Suchresultat gibt es dann auch nicht mehr.

    Vielen Dank für Unterstützung.

  2. #2
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.803
    Partner-ID
    10107

    Standard

    Poste mehr Code. Du hast uns zB verschwiegen, wie du diese Abfrage überhaupt genau machst.

  3. #3
    Contao-Nutzer Avatar von Spelmann
    Registriert seit
    24.11.2012.
    Ort
    Nördlich von Berlin
    Beiträge
    234

    Standard

    Ich gebe das Suchergebnis in einem PHP-File aus, das ich als Modul via "eigenes HTML" einbinde.

    Nachdem ich den (via GET) übergebenen String gefiltert habe starte ich die Datenbankanfrage:
    PHP-Code:
    $this->import('Database');
    $meinArtikel $this->Database->prepare('SELECT artnr FROM `produktliste` WHERE `modell` LIKE "%'.implode('%" AND `modell` LIKE  "%'$produktsuche).'%"')->execute(); 
    Ich habe folgendes erfolglos versucht:
    PHP-Code:
    $meinArtikel $this->Database->prepare('SELECT artnr FROM `produktliste` WHERE `modell` LIKE ?')->execute('%$produktsuche%'); 

  4. #4
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.803
    Partner-ID
    10107

    Standard

    Nimm einfach
    PHP-Code:
    $this->Database->query('SELECT artnr FROM `produktliste` WHERE `modell` LIKE "%'.implode('%" AND `modell` LIKE  "%'$produktsuche).'%"'); 

    Welche Contao Version überhaupt?

  5. #5
    Contao-Nutzer Avatar von Spelmann
    Registriert seit
    24.11.2012.
    Ort
    Nördlich von Berlin
    Beiträge
    234

    Standard

    Uups Schlamperei: Contao Version ist 3.5.6

    Vielen Dank, so funktionierts!!

  6. #6
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.803
    Partner-ID
    10107

    Standard

    %X wird übrigens tatsächlich als Parameter Wildcard interpretiert, wenn ich das richtig verstehe: https://github.com/contao/core/blob/...ement.php#L326

    // nein, verstehe nicht ganz was dort überhaupt gemacht wird
    Geändert von Spooky (09.01.2017 um 13:12 Uhr)

  7. #7
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.477
    User beschenken
    Wunschliste

    Standard

    Vielleicht hilft das auch ein wenig:
    https://de.contaowiki.org/SQL_Like_A...Prozentzeichen
    Mit Like und % ist das so eine Sache :-)
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  8. #8
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.803
    Partner-ID
    10107

    Standard

    Zitat Zitat von BugBuster Beitrag anzeigen
    Vielleicht hilft das auch ein wenig:
    https://de.contaowiki.org/SQL_Like_A...Prozentzeichen
    Mit Like und % ist das so eine Sache :-)
    Laut seiner Aussage hat er das aber bereits probiert:
    Zitat Zitat von Spelmann Beitrag anzeigen
    Ich habe folgendes erfolglos versucht:
    PHP-Code:
    $meinArtikel $this->Database->prepare('SELECT artnr FROM `produktliste` WHERE `modell` LIKE ?')->execute('%$produktsuche%'); 
    Diese Variante sollte eigentlich funktionieren.

  9. #9
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.477
    User beschenken
    Wunschliste

    Standard

    Seine Variante war aber leicht anders. Bin mir aber nicht sicher ob das ausschlaggebend ist:
    Code:
    ->execute('%$produktsuche%');
    ->execute('%'.$produktsuche.'%');
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  10. #10
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.803
    Partner-ID
    10107

    Standard

    Achso, ja, das war tatsächlich falsch . Richtig muss es sein so wie du geschrieben hast, oder
    PHP-Code:
    ->execute("$produktsuche"); 
    Nur in Strings mit doppelten Anführungszeichen werden PHP Variablen mit deren Wert ersetzt. Bei einfachen Anführungszeichen nicht.

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •