C_Buster_G: String in DB suchen

Hi,

folgendes:

Ich habe vor meine Datenbank "MySQL" nach bestimmten Daten zu durchsuchen,
die DB besteht aus id,Jahr,Überschrieft,Text bei der suche von z.b. einem bestimmten Jahr "1955" klappt alles wunderbar er findet die Reihe und gibt mir diese auch wieder..Problem ist aber nach einem String zu suchen wie z.b. "Dies ist eine Überschrieft" denn dann passiert das:""Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in""....

Habt ihr einen Tip wie ich dieses hinbekommen kann?
Oder vieleicht nen Tip wie ich eine Volltextsuche realisieren kann?

So siehts bisher aus:

("SELECT *
FROM $table
WHERE Jahr = 1955 LIMIT 0, 30");

ich danke euch...

MfG Chris

  1. Hi,

    die DB besteht aus id,Jahr,Überschrieft,

    ähm... *hüstel* Dir ist aber schon bekannt, dass man "Schrift" ohne "e" schreibt?

    ""Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in""....

    Diese Meldung deutet meist darauf hin, dass das SQL-Statement keiner gültigen Syntax unterliegt. Lass Dir das generierte Statement auf den Bildschirm ausgeben.

    So siehts bisher aus:

    Einwandfrei funktionierenden Code nach Fehlern zu durchsuchen ist nur selten von Erfolg gekrönt. Ich kann daher nur mutmaßen, dass Du Dich bei den Anführungszeichen geirrt hast.

    Cheatah

    1. Hi,

      ähm... *hüstel* Dir ist aber schon bekannt, dass man "Schrift" ohne "e" schreibt?

      Jo du das ist mir bekannt, kommt öfter mal bei mir vor wen ich nen ganzen Tag am PC sitze, da seh ich blos noch Sternchen *g*..

      Einwandfrei funktionierenden Code nach Fehlern zu durchsuchen ist nur selten von Erfolg gekrönt. Ich kann daher nur mutmaßen, dass Du Dich bei den Anführungszeichen geirrt hast.

      da soll der Fehler sitzen:

      while($row = mysql_fetch_array($result))
      {
      echo "$row[Jahr],$row[Überschrieft],$row[Text]";
      }

      is aber keiner,
      ich denke aber das MySQL nicht mit der Suche nach "Text Leerzeichen Text" Strings klarkommt.. Oder weist du da mehr?

      Cheatah

      MfG Chris

      1. Hi,

        Jo du das ist mir bekannt, kommt öfter mal bei mir vor wen ich nen ganzen Tag am PC sitze, da seh ich blos noch Sternchen *g*..

        echt? Ich dachte, man _kann_ nur den ganzen Tag vorm PC sitzen! ;-)

        da soll der Fehler sitzen:

        Nein, wie gesagt liegt er bereits im Statement selbst. Die DB konnte es nicht richtig parsen; also liefert es auch keinen Pointer auf ein Result-Set. Dies an sich ist noch kein Fehler, von dem PHP merkt (nicht jedes SQL-Statement muss ein Result-Set erzeugen, z.B. INSERT INTO), deswegen meldet es sich erst, wenn Du versuchst, etwas nicht existentes zu verwenden.

        ich denke aber das MySQL nicht mit der Suche nach "Text Leerzeichen Text" Strings klarkommt.. Oder weist du da mehr?

        Doch, das ist kein Problem. Es kommt allerdings - wie jedes DBMS - nicht mit Strings klar, die nicht durch Singlequotes klar als solche erkenntlich gemacht wurden.

        Cheatah

  2. Hallo Chris,

    nach Texten sucht man mit "LIKE", also
    "Select * from irgendwas where ueberschrift like '%das ist eine überschrift%'"
    der "%"-Operator ersetzt beliebig viele Zeichen, so daß Du den Text auch findest, wenn noch mehr davor oder danach steht.

    Das wäre theoretisch auch eine Möglichkeit für eine Volltextsuche, bei großen Sites haut das nicht hin, weil es recht langsam ist (like mit "%" am anfang kann keinen Index benutzen). Ansonsten kannst Du auch die MySQL-Fulltext-Suchge verwenden, wenn Du eine aktuelle MySQL-Version hast:
    http://www.mysql.com/doc/en/Fulltext_Search.html

    Viele Grüße
    Stephan

    1. Hallo Chris,

      Hallo Stephan,

      nach Texten sucht man mit "LIKE", also
      "Select * from irgendwas where ueberschrift like '%das ist eine überschrift%'"
      der "%"-Operator ersetzt beliebig viele Zeichen, so daß Du den Text auch findest, wenn noch mehr davor oder danach steht.

      Erstmal danke für den Tip klingt recht viel versprechend...
      Also hab mich für die Version MATCH enschieden da die Datenbank doch recht gross ist, nur irgendwie will es einfach nicht klappen )-;
      Hier das Script:

      if($action == 'schlagzeile' && isset($id))
      {
      mysql_connect("localhost","$user","$pass");

      mysql_select_db("$db");

      $result = mysql_query("SELECT *
      FROM $table
      WHERE MATCH Überschrift AGAINST ('$id')");

      while($row = mysql_fetch_array($result)) <<<<-Hier bricht das Script ab
      {
      echo "$row[Jahr],$row[Überschrift],$row[Text]";
      }

      }

      Hoffe du oder jemand anders sieht den Fehler?

      Viele Grüße

      Grüsse Zurück

      Stephan

      Chris

      1. Hi,

        $result = mysql_query("SELECT *
        FROM $table
        WHERE MATCH Überschrift AGAINST ('$id')");

        hier liegt der Fehler,

        while($row = mysql_fetch_array($result)) <<<<-Hier bricht das Script ab

        sonst würde es hier nämlich nicht abbrechen.

        Hoffe du oder jemand anders sieht den Fehler?

        Nein, da Du das generierte Statement nicht ausgegeben hast, sondern nur den Code, der die Generierung deurchführt. Auf diese Weise kann man munter weiter raten, ohne jemals zum Ergebnis zu kommen. Es sei denn, "Überschrift" ist kein Platzhalter, sondern wörtlich gemeint - wobei ich mich frage, wie Du überhaupt eine Tabelle erzeugt hast, in deren Spaltennamen Umlaute vorkommen.

        Cheatah