Heinz: Fehler-Behandlung, DB- und Datei-Speicherung

Guten Tag,

ich möchte sowohl PHP- als auch DB-Fehler in eine Datenbank schreiben. Sollte allerdings keine Verbindung zur Datenbank aufgebaut werden können, dann sollen die Fehler in einer Datei abgespeichert werden.

Die DB-Fehlerbehandlung wird aufgerufen, nachdem ein Datenbankzugriff einen Fehler erzeugt hat, z.B.:

if (!(@mysql_db_query($name, $sql, $handle))) {
error_handler();
}

In der Funktion error_handler wird dann der Fehler in die Datenbank geschrieben.

Nun frage ich mich, wie ich am besten feststellen kann, ob die Speicherung der Fehlerbeschreibung erfolgreich war. Ansonsten soll der Fehlerbeschreibung in einer Datei landen.

Folgendes funktioniert ja leider nicht:
if (!(@mysql_db_query($name, $sql, $handle))) {
error_handler() or error_log($text, 3, "fehler.log");
}

Hat jemand von euch vielleicht eine passende Idee?

Danke

Heinz

  1. Hallo Heinz,

    ich möchte sowohl PHP- als auch DB-Fehler in eine Datenbank schreiben. Sollte allerdings keine Verbindung zur Datenbank aufgebaut werden können, dann sollen die Fehler in einer Datei abgespeichert werden.

    ich würde an Deiner Stelle _alles_ in eine Textdatei schreiben, ein Logfile. Auf den Versuch, einer Speicherung in einer DB würde ich aus dem von Dir genannten Grund verzichten. Da Du das Datenformat festlegst, sollte es kein Problem sein, eine Routine zu schreiben, die das Logfile zur Verarbeitung in eine Datenbank einliest.

    if (!(@mysql_db_query($name, $sql, $handle))) {

    Du solltest allmählich daran denken, mysql_db_query() durch mysql_select_db() und mysql_query zu ersetzen, da mysql_db_query seit PHP 4.0.6 veraltet ist.

    Freundliche Grüße

    Vinzenz

    1. Hallo Heinz,

      ich würde an Deiner Stelle _alles_ in eine Textdatei schreiben,

      ... und dafür entweder ein vollständiges CSV-Format benutzen,
      (also mit Feldtrenner und Feldbegrenzer, Umbrüche in den Feldern sind dann erlaubt), dann kannst Du Datei leicht in die Datenbank importieren vor dem betrachten und anschließend löschen.

      Umbenennen
        neue Logdatei bereitstellen
        umbenannte einlesen
        umbenanntge löschen

      oder ein reines Textformat, das bestimmte Zeichen als Trennzeichen zwischen den Feldern reserviert, also Quasi-CSV.
      Das kann man dann auch mit reinen Text-Tools anschauen, verarbeiten, usw. Umbrüche (Zeilenendezeichen) in den Feldern sind dann nicht erlaubt.

      Und bedenke: Die Fehlermeldung "too many connections" in dieselbe Datenbank zu schreiben, dürfte nahezu unmöglich sein. :-))

      LG
      Chris

      1. Hallo Chris,

        Und bedenke: Die Fehlermeldung "too many connections" in dieselbe Datenbank zu schreiben, dürfte nahezu unmöglich sein. :-))

        hehe, diese ist auch ganz nett:

        Error: 1021 SQLSTATE: HY000  (ER_DISK_FULL)
           Message: Disk full (%s); waiting for someone to free some space

        Wenn die nette Person "someone" kommt, dann könnte es ja klappen. Dann passt einmal die Fehlermeldung rein und die nächste INSERT-Anweisung provoziert wieder

        Error: 1021 SQLSTATE: HY000  (ER_DISK_FULL)
           Message: Disk full (%s); waiting for someone to free some space

        Deswegen sind Deine Hinweise zum gelegentlichen Löschen des Logs mehr als nützlich. Sonst gibt es eine ähnliche Fehlermeldung für die Logdatei...

        Freundliche Grüße

        Vinzenz

  2. echo $begrüßung;

    Nun frage ich mich, wie ich am besten feststellen kann, ob die Speicherung der Fehlerbeschreibung erfolgreich war.

    Das machst du am besten genau so, wie du sonst auch feststellst, ob ein Datenbankbefehl erfolgreich war.

    echo "$verabschiedung $name";