Paul Styrnol: (MySQL) Überprüfen ob Abfrage Ergebnisse zurückgegeben hat

Hallo,

ich mache über PHP folgende Abfrage:

mysql_connect('localhost');
 mysql_select_db("galerie");
 $result = mysql_query("SELECT name, titel FROM album WHERE name = '" . $_POST["gname"] . "'");
 while($row = mysql_fetch_array($result)) {
   mach_was();
 }

Nun ich will überprüfen, ob meine mir meine Abfrage überhaupt irgendwelche Ergebnisse liefert. Abzufragen ob $result FALSE ist bringt ja nichts.

Das alleine sagt jedoch überhaupt nichts über die Anzahl
veränderter oder gelieferter Datensätze aus.

(http://www.php.net/manual/de/function.mysql-query.php)

Laut der Funktionsbeschreibung von mysql_fetch_array müsste FALSE zurückgegeben werden wenn keine Datensätze vorhanden sind, also habe ich übeprüft ob $row["name"] bzw. $row["titel"] FALSE ist, komischerweise hat das nicht funktioniert.

Nach kurzer Recherche bin ich auf die Funktion mysql_num_rows() gestoßen, habe die Funktion innerhalb der Schleife wie folgt angewendet:

$anzahl = mysql_num_rows($result);
 if ($anzahl != "" AND $tempvar != "0") {
   mach_was1();
 } else {
   mach_was2();
 }

Liefert mir die SQL-Abfrage Ergebnisse wird mach_was1() (seht es als Platzhalter) ausgeführt, gibt es keine Ergebnisse müsste dann doch eigentlich das ausgeführt werden was nach else kommt. Aber - quelle surprise - es passiert nichts.

$row["name"] und $row["titel"] habe ich übrigens auch mit isset() überprüft, nix führte zum Ziel.

Hat irgendjemand eine Idee wie ich mein Problem lösen könnte?

Viele Grüße
Paul

--
Meine Photos:  http://www.rapunzeln.de
Meine Tribals: http://www.tribal-galerie.de
  1. Holladiewaldfee,

    $anzahl = mysql_num_rows($result);
    if ($anzahl != "" AND $tempvar != "0") {

    Hat irgendjemand eine Idee wie ich mein Problem lösen könnte?

    Ja: Vergleiche nicht einen Integer-Wert mit einem String.

    $a = mysql_num_rows($res);
    if($a>0)
    { while(...)
       blablubb(); }
    else
     echo 'War wohl nix';

    Ciao,

    Harry

    --
      Bald kommt die Waldfee ... (Projektphase: Planung)
      Bis dahin:
      http://harry.ilo.de/projekte/berge/
    1. Hallo,

      $anzahl = mysql_num_rows($result);
      if ($anzahl != "" AND $tempvar != "0") {

      Hat irgendjemand eine Idee wie ich mein Problem lösen könnte?

      Ja: Vergleiche nicht einen Integer-Wert mit einem String.

      $a = mysql_num_rows($res);
      if($a>0)
      { while(...)
         blablubb(); }
      else
       echo 'War wohl nix';

      Also gut, jetzt sieht es bei mir folgendermaßen aus:

      mysql_connect('localhost');
       mysql_select_db("galerie");
       $result = mysql_query("SELECT name, titel FROM album WHERE name = '" . $_POST["gname"] . "'");
       while($row = mysql_fetch_array($result)) {
         $anzahl = mysql_num_rows($result);
         if ($anzahl>0) {
           mach_was1();
         } else {
           mach_was2();
         }
       }

      Die gleiche Situation wie vorhin, gibt es Ergebnisse wird mach_was1() ausgeführt, gibt es keine passiert nix.

      Viele Grüße
      Paul

      --
      Meine Photos:  http://www.rapunzeln.de
      Meine Tribals: http://www.tribal-galerie.de
      1. Hallo Paul,

        while($row = mysql_fetch_array($result)) {
           $anzahl = mysql_num_rows($result);
           if ($anzahl>0) {
             mach_was1();
           } else {
             mach_was2();
           }
        }

        Die gleiche Situation wie vorhin, gibt es Ergebnisse wird mach_was1() ausgeführt, gibt es keine passiert nix.

        Die While-Schleife wird NUR DANN ausgeführt, wenn Ergebnisse vorhanden sind. Harry hat Dir korrekten Code gepostet, Du hast ihn jedoch falsch verstanden.

        if ($anzahl>0) {
          mach_was1();
          while($row = mysql_fetch_array($result)) {
            $anzahl = mysql_num_rows($result);
          }
        } else {
          mach_was2();
        }

        Viele Grüße,
        Christian

        1. Hallo,

          Die While-Schleife wird NUR DANN ausgeführt, wenn Ergebnisse vorhanden sind. Harry hat Dir korrekten Code gepostet, Du hast ihn jedoch falsch verstanden.

          if ($anzahl>0) {
            mach_was1();
            while($row = mysql_fetch_array($result)) {
              $anzahl = mysql_num_rows($result);
            }
          } else {
            mach_was2();
          }

          Danke euch, jetzt wird je nachdem ob Ergebnisse zurückgegeben werden oder nicht die richtige Aktion ausgeführt, allerdings schreint die Aktion nicht richtig zu sein. Folgendes habe ich innerhalb der if-Abfrage stehen (anstatt mach_was2()):

          echo 'ok';  <--- Nur zum überprüfen vorhanden
          while($row = mysql_fetch_array($result)) {

          $myquery = mysql_query("INSERT INTO 'album' ( 'name' , 'titel' , 'sichtbar' , 'datum' ) VALUES ('" . $_POST["gname"] . "', '" . $_POST["gtitel"] . "', '" . $gsichtbar . "', '" . $curdate . "')");

          if($myquery == FALSE) {

          echo "Konnte die MySQL-Abfrage nicht verarbeiten <br />\n";
              echo "MySQL-Antwort:".mysql_error();
              die();
            } else {
              echo 'Einfügen der Daten war erfolgreich.';
            }

          }

          "ok" wird ausgegeben, d.h. er springt mir in den richtigen Teil der vorhin besprochenen Schleife, die Abfrage wird allerdings nicht ausgeführt, ich finde keine neuen Datensätze in der Datenbank vor.
          Wenn die Abfrage schief geht müsste doch eigentlich die Fehlermeldung ausgegeben werden.

          Bei der Funktionsbeschreibung von mysql_query() steht ja folgendes:

          Für alle anderen SQL Anweisungen ist der Rückgabewert von
          mysql_query() im Erfolgsfall TRUE, im Fehlerfall FALSE. Ein
          Rückgabewert ungleich FALSE bedeutet, dass die Anfrage gültig war
          und vom Server ausgeführt werden konnte.

          Hier wird aber anscheinend gar nix zurückgegeben, wie kann das sein?

          Viele Grüße
          Paul

          --
          Meine Photos:  http://www.rapunzeln.de
          Meine Tribals: http://www.tribal-galerie.de