Andy: Fehlerausgabe bei Mysql-Abfragen

Hallo Forum,
ich komm' so überhaupt nicht weiter ...

Was ich möchte, ist,
mir eine Mail schicken lassen (oder echo "Fehlertext";)
wenn 1 Datensatz nicht gefunden wird,
aber ich krieg's nicht hin o(

Versuch 1:
$itemID=mysql_query("select * from $db WHERE ID = '$ID'") or die("Fehler $ID");

Klappt nur, wenn ein echter Fehler vorliegt, also die $db nicht gefunden wird.
_________

Versuch 2:
$itemID=mysql_query("select * from $db WHERE ID = '$ID'") or die();
if (!$itemID) {
echo "Fehler $ID";
errormail($ID);
}

Klappt überhaupt nicht,
weil als $itemID in jedem Fall eine "Resource id #27" vorhanden ist,
obwohl es den angeforderten Datensatz überhaupt nicht gibt.
Es gibt den Fall !$itemID also gar nicht!
_________

Was mache ich falsch oder Wie kriege ich's hin ?
*grübel*
Danke, Andy

  1. Was mache ich falsch oder Wie kriege ich's hin ?

    Du benutzt das Ergebnis der Funktion mysql_query nicht wie vorgesehen. Wenn du das so wie im Beispiel machst, wirst du mehr Erfolg haben.

    1. Was mache ich falsch oder Wie kriege ich's hin ?

      Du benutzt das Ergebnis der Funktion mysql_query nicht wie vorgesehen. Wenn du das so wie im Beispiel machst, wirst du mehr Erfolg haben.

      Hi dedlfix,
      angeguckt, verschiedene Sachen versucht, blick ich nicht ...

      Der or-Fall tritt doch nur ein,
      wenn DB oder Spalte nicht gefunden werden,
      aber nicht, wenn es den Datensatz nicht gibt.
      In diesem Fall kriegst Du auf jeden Fall (ich zumindest *grübel* o)
      ein array zurück und hast somit auch keinen Fehlerfall mehr.

      Ich geh jetzt über die Krücke if(mysql_num_rows($itemID) == 0),
      obwohl mich das nicht wirklich befriedigt
      und ich es auch einfach verstehen will ...

      Aber Besten Dank, Andy

      1. Hallo,

        Ich geh jetzt über die Krücke if(mysql_num_rows($itemID) == 0),
        obwohl mich das nicht wirklich befriedigt

        Das ist aber die einfachste Lösung bei SELECT-Statements. Für UPDATE, INSERT bzw. DELETE dann entsprechend mysql_affected_rows.
        Eine weitere mögliche Lösung wäre, das Resultset mit mysql_fetch... auszulesen und zu prüfen, ob gleich FALSE (keine Datensätze mehr) zurück kommt.

        weil:

        aber nicht, wenn es den Datensatz nicht gibt.
        In diesem Fall kriegst Du auf jeden Fall
        ein array zurück und hast somit auch keinen Fehlerfall mehr.

        Ein SQL-Statement, welches keine Datensätze betrifft bzw. zurückgibt, ist _deswegen_ ja auch nicht fehlerhaft.

        viele Grüße

        Axel

        1. Hi Axel,
          Allerbesten Dank!

          Das ist genau die richtige Antwort für Newbies wie mich
          Gruss, Andy