Johannes Völlinger: MySQL Result abfragen

Bin noch neu in Sachen MySQL und PHP, weswegen ich bei ner Kleinigkeit nicht weiterkomme:
Wie kann ich überprüfen, ob er nach abschicken des MySQL Befehls einen Wert in der Ereigniskette stehen hat bzw. was gibt er zurück, wenn er keine Übereinstimmung gefunden hat?

Habe es schonmal so ausprobiert, aber es lief leider nicht:
if(mysql_result($result,Name)==false) {
...
}

Wollte nämlich bei einer Passwort Eingabe überprüfen, ob der eingegebene Name überhaupt in der Datenbank gespeichert ist, und ihn ansonsten zurück zur Eingabe schicken.

Bin dankbar für jede Hilfe! :-)
Johannes

  1. Moin,

    Wie kann ich überprüfen, ob er nach abschicken des MySQL Befehls einen Wert in der Ereigniskette stehen hat bzw. was gibt er zurück, wenn er keine Übereinstimmung gefunden hat?

    "Ereignis"? Bin ich hier im falschen Film, oder was? ;-)

    Habe es schonmal so ausprobiert, aber es lief leider nicht:
    if(mysql_result($result,Name)==false) {
    ...
    }

    Das wird vorne und hinten nichts:
    1. möchte man mysql_result() eigentlich gar nicht benutzen
    2. hast du mysql_result() falsch aufgerufen: als zweites Argument soll die gewünschte Zeile angegeben werden und kein String.
     2a. Strings schliesst man in "" ein, weil das ansonsten keinen Spaß macht. PHP verarbeitet das zwar trotzdem weil es glaubt du würdest eine Konstante ansprechen wollen und gibt eine Fehlernotiz (die per default nicht angezeigt wird), aber du solltest das nicht tun.
    3. Das was du willst geht mit mysql_num_rows(). Zuerst überprüfst du mit if(!$result) ob bei der Abfrage irgendwas schiefgegangen ist, und dann kannst du mit mysql_num_rows($result) die Anzahl der zurückgegebenen Zeilen abfragen. Wenn da 1 rauskommt, dann existiert der Name in der Datenbank. (Bei 0 ist er nicht drin und bei >1 sind mehrere drin was auch kein gutes Zeichen ist)

    --
    Henryk Plötz
    Grüße aus Berlin

    1. Hi!

      Wie kann ich überprüfen, ob er nach abschicken des MySQL >>Befehls einen Wert in der Ereigniskette stehen hat bzw. was gibt er zurück, wenn er keine Übereinstimmung gefunden hat?

      "Ereignis"? Bin ich hier im falschen Film, oder was? ;-)

      -------------
      Jaja, meinte ja auch Ergebniskette. Obwohl ich Ereigniskette eigentlich auch nicht schlecht finde. Werde es mal als neue Bezeichnung vorschlagen, denn das macht Datenbank-Entwicklung noch  spannender ;-)

      Habe es schonmal so ausprobiert, aber es lief leider nicht:
      if(mysql_result($result,Name)==false) {
      Das wird vorne und hinten nichts:

      1. möchte man mysql_result() eigentlich gar nicht benutzen

      -------------
      Ansichtsache ;-)

      1. hast du mysql_result() falsch aufgerufen: als zweites Argument soll die gewünschte Zeile angegeben werden und kein String.
        2a. Strings schliesst man in "" ein, weil das ansonsten keinen Spaß macht. PHP verarbeitet das zwar trotzdem weil es glaubt du würdest eine Konstante ansprechen wollen

      -------------
      Da muß ich dich leider enttäuschen, das klappt wunderbar. Habe es bereits so zugewiesen und es läuft einwandfrei (ist ja auch der genaue Befehl aus SQL). Und Anführungszeichen kommen da gar nicht rein, denn es wird ja eine Spalte über den Namen angesprochen!
      Beispiel:
      $result=mysql_query("select Name from Personal where ID='$id');
      $name=mysql_result($result,Name);

      1. Das was du willst geht mit mysql_num_rows(). Zuerst überprüfst du mit if(!$result) ob bei der Abfrage irgendwas schiefgegangen ist, und dann kannst du mit mysql_num_rows($result) die Anzahl der zurückgegebenen Zeilen abfragen. Wenn da 1 rauskommt, dann existiert der Name in der Datenbank. (Bei 0 ist er nicht drin und bei >1 sind mehrere drin was auch kein gutes Zeichen ist)

      -------------
      Das klingt doch schon sehr gut, werde ich gleich austesten.

      Danke dir für deine Hilfe! :-)

      1. Moin,

        Ansichtsache ;-)

        Nicht wenn du mit größeren Mengen rumhantierst, dann ist mysql_fetch_array laut Doku deutlich schneller.

        Da muß ich dich leider enttäuschen, das klappt wunderbar. Habe es bereits so zugewiesen und es läuft einwandfrei (ist ja auch der genaue Befehl aus SQL). Und Anführungszeichen kommen da gar nicht rein, denn es wird ja eine Spalte über den Namen angesprochen!
        Beispiel:
        $result=mysql_query("select Name from Personal where ID='$id');
        $name=mysql_result($result,Name);

        Dass es funktioniert bedeutet ja noch nicht dass es richtig ist :)
        Also: Wenn du Name ohne $ davor oder " davor und dahinter schreibst, dann denkt PHP dass du eine Konstante namens Name benutzen willst und weil die nicht definiert ist, denkt es du möchtest den Namen der Konstante benutzen. echo Name; gibt also tatsächlich
        Name
        aus. Das ist aber reiner Zufall und du solltest dich darauf nicht verlassen. Daher: _Immer_ wenn du einen String benutzen willst, setze ihn in Anführungsstriche. (Dieses Verhalten ist denke ich dafür da, dass die Blindgänger auch mal $einlustigesArray[haha] sagen können, wenn sie eigentlich $einlustigesArray["haha"] meinen)

        OK, wie wir eben festgestellt haben, rufst du also mysql_result($result, "Name") auf. Was als nächstes passiert: PHP schaut sich den zweiten Parameter an und weil es eigentlich einen Integer (die Nummer der Zeile) erwartet hat, wandelt es ihn in einen Integer um. Aus dem "Name" wird also 0. Dann geht die Funktion ans Werk und liefert dir Daten aus der 0. Zeile und weil du vergessen hast anzugeben welche Spalte du willst nimmt es (afaik) ebenfalls die 0.
        Dass das nun rein zufällig genau das ist was du haben wolltest, dafür kann PHP nichts. Aber es ist auf jedenfall nicht das passiert was du dachtest das passiert.

        Probier es aus:
        mysql_result($result, "Name")
        mysql_result($result, blabla)
        mysql_result($result, 0)
        mysql_result($result, 0, "Name") <-- Das wäre die richtige Schreibweise für das was du willst
        bringen alle exakt das selbe Ergebnis.

        --
        Henryk Plötz
        Grüße aus Berlin

        1. Moin,

          Ansichtsache ;-)

          Nicht wenn du mit größeren Mengen rumhantierst, dann ist mysql_fetch_array laut Doku deutlich schneller.

          Ich nutze es persönlich auch nur bei kleineren Mengen. Bei großen Rückgabe Mengen kommt für mich auch nur mysql_fetch_array oder fetch_row in Frage.

          Dass es funktioniert bedeutet ja noch nicht dass es richtig ist :)

          Das ist ein Argument ;-)

          Also: Wenn du Name ohne $ davor oder " davor und dahinter schreibst, dann denkt PHP dass du eine Konstante namens Name benutzen willst und weil die nicht definiert ist, denkt es du möchtest den Namen der Konstante benutzen. echo Name; gibt also tatsächlich
          Name
          aus. Das ist aber reiner Zufall und du solltest dich darauf nicht verlassen.

          Das hätte ich bei diesem Beispiel nicht gemerkt, denn es kann ja höchstens ein Datensatz zurückkommen und der ist in der 1.Zeile(0).

          mysql_result($result, 0, "Name") <-- Das wäre die richtige Schreibweise für das was du willst
          bringen alle exakt das selbe Ergebnis.

          Werd's mir merken. Syntax unterscheidet sich von SQL doch teilweise etwas stärker, aber man lernt ja nie aus. :-)

          Danke nach Berlin :-)