Announcement

Collapse
No announcement yet.

PHP und MYSQL Datenbankanfrage

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • PHP und MYSQL Datenbankanfrage

    Hallo Entwickler Forum Gemeinde, da ihr hier ziemlich gut seid mit euren Hilfen, haben mich zumindest bisher immer weiter gebracht, mal wieder eine mehr oder minder schwere Frage
    Also zu meinem Problem ich stelle mit php eine Anfrage an meine Datenbank und speichere das gelieferte Ergebnis in einer variablen ab.
    Code:
    $dbuser = "SELECT Pseudonym, Mail  FROM `user` WHERE `Pseudonym`='$abspseudo' OR `Mail`='$absmail'";
    $anfrage = mysql_query($dbuser);
    So weit so gut kurz zur Erklärung $abspseudo und $absmail sind meine vom User eingegeben Werte.
    Nun möchte ich eine Abfrage schreiben in der meine Anweisung nur ausgeführt wird wenn die Datenbank auch ein Result zurückgeliefert hat.
    Code:
      ... elseif(strlen($anfrage!==0)) { todo Teil }
    Überprüfe nun ob die Länge des Inhalts meiner Variable !== 0 ist, falls Sie also nichts enthält sollte php diesen Teil eigentlich ignorieren.
    Mein Problem ist nun jedoch dass die Abfrage auch ausgeführt wird wenn die Datenbank eigentlich nichts zurückliefert. Meine Variable $anfrage somit eigentlich auch nichts enthalten dürfte, oder sendet MYSQL irgendeinen Leerstring oder Zeichensatz bei einem "leeren" Result zurück?

    Hoffe ich habe mich klar genug ausgedrückt, falls nicht steh ich gern für weitere Fragen zur Verfügung.

    Mal wieder Danke für Eure Hilfe.

  • #2
    Das Ergebnis von mysql_query sollte dahingehend geprüft werden, ob die Abfrage überhaupt korrekt/möglich war (true/false). Insofern ist das prüfen der Länge nicht zielführend.
    Die Menge des Ergebnisses kann im true-Fall dann mit mysql_num_rows bzw. mit mysql_affected_rows (je nach SQL Statement) geprüft werden.

    Anfrage war korrekt, aber kein Ergebnis
    mysql_query=true
    mysql_num_rows=0
    Zuletzt editiert von Christian Marquardt; 30.09.2010, 07:31.
    Christian

    Comment


    • #3
      Hallo,
      Originally posted by alexm83 View Post
      ...Mein Problem ist nun jedoch dass die Abfrage auch ausgeführt wird wenn die Datenbank eigentlich nichts zurückliefert. Meine Variable $anfrage somit eigentlich auch nichts enthalten dürfte, oder sendet MYSQL irgendeinen Leerstring oder Zeichensatz bei einem "leeren" Result zurück?
      Ein kurzer Blick ins Handbuch zu mysql_query() zeigt dir, dass der Rückgabewert nicht "irgendein String oder Zeichensatz" ist, sondern:
      Nur für SELECT, EXPLAIN, SHOW oder DESCRIBE Anweisungen liefert mysql_query() eine Ressourcen-Kennung oder FALSE, falls die Anfrage nicht korrekt ausgeführt wurde. Für alle anderen SQL Anweisungen ist der Rückgabewert von mysql_query() im Erfolgsfall TRUE, im Fehlerfall FALSE.
      Und wenn ein Select KEINEN Datensatz zurückliefert, dann ist das SQL-technisch kein Fehler und du erhälst eine gültige Ressourcen-Kennung, die eben auf ein LEERES Recordset verweist.

      Wie du prüfen kannst ob das Recordset Daten enthält, hat dir Christian ja schon verraten.

      Es ist jedoch auch durchaus üblich, auf das Recordset einfach ein mysql_fetch_row() auszuführen und erst dieses zu prüfen.

      PHP Code:
      $dbuser "SELECT Pseudonym, Mail  FROM `user` WHERE `Pseudonym`='$abspseudo' OR `Mail`='$absmail'";
      $anfrage mysql_query($dbuser);
      if ((
      $ergebnis mysql_fetch_row($anfrage)) !== false) {
        
      tue_irgendwas_mit_den_daten($ergebnis);
      }
      else {
        
      kein_datensatz_gefunden();

      Vorteil: Im Erfolgsfall hat man sofort die Daten zur Verfügung und spart sich also eine Befehlsausführung.

      Gruß Falk
      Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

      Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

      Comment


      • #4
        Ok, damit hätte sich dieses Problem(chen) dann ebenfalls in Luft aufgelöst beide Vorschläge führen zum gewünschten Resultat.
        Muss mit den Daten in meinem Fall nichts weiter machen darum reicht mir Christians Vorschlag aus.
        Allerdings ist die Daten direkt zwischenzuspeichern für weiter Versuche auch interessant.

        Bis dann mal wieder

        Mit freundlichen Grüßen
        Alex

        Comment


        • #5
          Originally posted by alexm83 View Post
          ...Muss mit den Daten in meinem Fall nichts weiter machen darum reicht mir Christians Vorschlag aus.
          Dann frage ich mich allerdings warum du die Daten abfragst, wenn du sie nicht benötigst?
          Warum nicht einfach ein
          [highlight=sql]
          select count(*)
          from user
          WHERE Pseudonym = '$abspseudo'
          OR Mail = '$absmail'
          [/highlight]
          Das liefert in jedem Fall genau EINEN Datensatz mit dem BENÖTIGTEN Ergebnis.
          Wenn du an der Kinokasse wissen willst, ob es noch freie Plätze gibt, dann bestellst du wahrscheinlich einfach alle Restkarten, zählst die dann und schmeist sie weg, statt einfach an der Kasse zu fragen .

          Gruß Falk
          Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

          Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

          Comment

          Working...
          X