Fred: Leere Datenbankabfrage nicht erkennbar

Tag,

ich verzweifle an einem einfachen SELECT-Script:

$entry_sql = "SELECT [lange Abfrage...]";
$entry_result=mysql_query($entry_sql);
echo mysql_errno($db) . ": " . mysql_error($db). "\n";
while($entry=mysql_fetch_array($entry_result)) {
  if(empty($entry)) {
    echo 'Keine Einträge für heute';
  } else {
    // Ausgabecode
  }
}

Wenn für die SELECT-Anweisung brauchbare Einträge zur Verfügung stehen, werden diese auch korrekt geladen und ausgegeben. Das Problem liegt also nicht in der SQL-Syntax. Das Problem liegt darin, leere Abfragen zu erkennen. Die if-Weiche mit empty($entry) soll das erledigen. Nur leider wird die while-Schleife gar nicht erst ausgeführt, wenn SQL keine Einträge zurückgibt (getestet mit echo). Ich kann mir somit die gesamte if-Abfrage in der while-Schleife sparen. Wie erkenne ich nun aber, ob Mysql ein leeres Resultat zurückgibt? Fehler werden nicht erzeugt, wenn die Abfrage leer bleibt. Ein empty($entry_result); vor while funktioniert auch nicht, da echo $entry_result; immer "Resource id #7" ausgibt (woher das auch immer kommen mag, ein DB-Eintrag ist das nicht). Wie kann ich nun vorgehen?

mfG
Fred

  1. Tag,

    ich verzweifle an einem einfachen SELECT-Script:

    $entry_sql = "SELECT [lange Abfrage...]";
    $entry_result=mysql_query($entry_sql);
    echo mysql_errno($db) . ": " . mysql_error($db). "\n";
    while($entry=mysql_fetch_array($entry_result)) {
      if(empty($entry)) {
        echo 'Keine Einträge für heute';
      } else {
        // Ausgabecode
      }
    }

    $anzahl = mysql_num_rows($_entry_result);
    if ($anzahl==0) {
    // tu irgendwas
    } else {
    while (......)
    }

    Gruß
    Joah.

  2. Hi Fred,

    Wie erkenne ich nun aber, ob Mysql ein leeres Resultat zurückgibt?

    Probier mal aus, vor der while-Schleife noch mit mysql_num_rows() abzuprüfen, ob überhaupt Datensätze zurück gegeben wurden:

    if(mysql_num_rows($entry_result) == 0)  
    {  
      echo "Keine Einträge";  
    }  
    else  
    {  
      while ...  
    }
    

    MfG, Dennis.

    --
    Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
    Wer die FAQ gelesen hat, ist klüger! ... und weiß wie man Links macht ;-)
  3. Besten Dank an alle.

  4. Hi Fred,

    while($entry=mysql_fetch_array($entry_result)) {
      if(empty($entry)) {
        echo 'Keine Einträge für heute';
      } else {
        // Ausgabecode
      }
    }

    wie schon gesagt mysql_num_rows()
    aber bau es nicht in die while-schleife ein, weil wenn es keine einträge gibt, gibt mysql_fetch_array false zurück und das while wird garnicht ausgefürht. Stattdessen:
    if(!mysql_num_rosw())
    {
    echo 'nix gefundenblalba';
    }
    else
    {
    while blabla
    }

    Gruß, Marian

  5. echo $begrüßung;

    Ein empty($entry_result); vor while funktioniert auch nicht, da echo $entry_result; immer "Resource id #7" ausgibt (woher das auch immer kommen mag, ein DB-Eintrag ist das nicht). Wie kann ich nun vorgehen?

    Du solltest dir im PHP-Handbuch die Funktionsweise der von dir verwendeten Funktionen nachlesen. Dort ist genau beschrieben, was die Funktionen für Parameter erwarten und auch, was sie im Erfolgsfall und im Fehlerfall zurückgeben.
    Deine obige Aussage ist falsch. Das wirst du spätestens nach dem ersten Fehler, den MySQL zu vermelden hat feststellen.
    Falls Parameter deines SQL-Befehls von einer Benutzereingabe kommen, gib doch dort mal ein ' ein.

    echo "$verabschiedung $name";