Matze: SQL Befehl will nicht

Hallo!
Ich bräuchte Hilfe bei einem PHP / DB Problem.
Ich bin gerade dabei eine Suchfunktion mit PHP zu realisieren.
Jetzt habe ich folgendes Problem.
Meine Suchabfrage habe ich erstmal so:

$sql = "SELECT * FROM tabelle WHERE spalte1 LIKE '%$suche%' AND spalte2 LIKE '%$suche%' AND spalte3 LIKE '%$suche%' ORDER BY $suche DESC";

($suche wird von einem Formular übergeben)
Wenn ich das so ausführe findet er nichts. Müsste er aber.
Ich habe die Abfrage bis auf

$sql = "SELECT * FROM tabelle WHERE spalte1 LIKE '%$suche%' ORDER BY '$suche' DESC";

verkürzt bis es ging.
Das ist aber nicht sehr sinnvoll für meine Suchefunktion.
Ich habe mir den Code auch mal von PHPMYADMIN ausgeben lassen,
da funktioniert es ja. Wenn ich ihn aber nutzen will - fehlanzeige.

Kann mir bitte jemand helfen?

  1. Hi,

    $sql = "SELECT * FROM tabelle WHERE spalte1 LIKE '%$suche%' AND spalte2 LIKE '%$suche%' AND spalte3 LIKE '%$suche%' ORDER BY $suche DESC";

    Es ist IMMER sinnvoll, sich mit echo $sql; mal anzeigen zu lassen, was da eigentlich bei rauskommt. So kann sich hier keine vorstellen, wie das in der "nicht funktioniert"-Situation aussieht. Ach ja, was war die Fehlermeldung? Keine Fehlermeldung? Einfach nichts gefunden?
    Na ja, ein Datensatz, der der Suche entsprechen soll muss in spalte1, spalte2 und spalte3 das Selbe* stehen haben, sonst erfüllt er die AND-Verknüpfung nicht. Entweder suchst du dann eine OR-Verknüpfung oder du suchst jeweils Teile von $suche (dann wird es kompliziert)

    * nur bedingt, da durch LIKE zumindest davor und dahinter auch abweichende Zeichen stehen können.

    MfG
    Rouven

    --
    -------------------
    ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(
    1. Hallo!

      Also es kommt in der Tat vor das der Suchbegriff in allen Spalten steht.
      Das Ergebniss ist dass das mysql_fetch_array() dann leer ist.
      echo ergibt quasi nichtmal ein Leerzeichen.

      Ich hab das AND trotzdem ersetzt und jetzt so:

      $sql = "SELECT * FROM tabelle WHERE spalte1 LIKE '%$suche%' OR spalte2 LIKE '%$suche%' OR spalte3 LIKE '%$suche%' ORDER BY interpret DESC";

      und das funktioniert.

      Danke!

      Grüße, Matze

      1. echo $begrüßung;

        Das Ergebniss ist dass das mysql_fetch_array() dann leer ist.
        echo ergibt quasi nichtmal ein Leerzeichen.

        Nein, das Ergebnis von mysql_fetch_array(), wenn kein (weiterer) Datensatz abgerufen werden kann, ist false. PHP ist so freundlich, ein false in ein Nichts umzuwandeln, wenn es in einem String-Kontext erscheinen soll. var_dump() ist bei Tests auf Variableninhalte aussagekräftiger als echo.

        echo "$verabschiedung $name";

  2. Hallo Matze,

    Meine Suchabfrage habe ich erstmal so:
    $sql = "SELECT * FROM tabelle WHERE spalte1 LIKE '%$suche%' AND spalte2 LIKE '%$suche%' AND spalte3 LIKE '%$suche%' ORDER BY $suche DESC";

    Wenn ich das so ausführe findet er nichts.

    wenn Du 'e' als Suchbegriff eingibst, findet die Abfrage vielleicht was. Du solltest den logischen Operator AND durch OR ersetzen.

    Müsste er aber.

    Oha, Du hast in _einem_ Datensatz in _jeder_ einzelnen Suchspalte Deinen Suchbegriff stehen? Tatsächlich?

    Ich habe die Abfrage bis auf
    $sql = "SELECT * FROM tabelle WHERE spalte1 LIKE '%$suche%' ORDER BY '$suche' DESC";
    verkürzt bis es ging.

    ja, das wundert mich wenig. In Spalte1 kommt Dein Suchbegriff wohl vor.

    Ich habe mir den Code auch mal von PHPMYADMIN ausgeben lassen,
    da funktioniert es ja.

    Kaum zu glauben :-)

    Freundliche Grüße

    Vinzenz

  3. Hiho

    $sql = "SELECT * FROM tabelle WHERE spalte1 LIKE '%$suche%' AND spalte2 LIKE '%$suche%' AND spalte3 LIKE '%$suche%' ORDER BY $suche DESC";

    Du willst _wirklich_ nach $suche ordnen? (Ich weiss zwar nicht, ob das was mit deinem Problem zu tun hat, aber auf jeden Fall kommt es mir seltsam vor - ein solcher _Spaltenname_ dürfte in ca. 99.9% aller Suchanfragen nicht existieren. Allerdings sollte es dann einen aussagekräftigen SQL-Fehler geben ;-) )

    Liebe Grüße

    mbr