dedlfix: Datenbankverbindung funktioniert nicht

Beitrag lesen

echo $begrüßung;

Wir kommen, so wie es aussieht, an dieser Stelle nicht weiter. Das Problem liegt, so vermute ich, an einer Ursache, die sich speziell auf deine Umgebung bezieht. Versuch doch mal, wie schon vorgeschlagen, das Problem mit dem geringstmöglichen Code nachzustellen. Wenn der Fehler ausbleibt, ergänze nach und nach die restlichen Codeteile bis er auftaucht. Dann solltest du dem Verursacher schon ziemlich nahe sein.

Du kannst auch Kontrollausgaben einfügen, damit du weißt, welche Programmteile in welcher Reihenfolge aufgerufen werden. Beispielsweise:

echo 'mysql_connect';
  mysql_connect(...)

Vielleicht stellt es sich so heraus, dass du am Connect gar nicht vorbeikommst. (Beachte dass dir deine Ausgabepufferung hierbei die "Mess"ergebnisse verfälschen kann.)

Ein anderer Gedanke: Im Allgemeinen kann man solch eine Aufgabenstellung durch das Singleton-Pattern lösen. Du verwendest die Eigenschaft PHPs, dass die Verbindungskennung des zuletzt ausgeführten Connects (in deinem Fall ist es auch der einzige) implizit verwendet wird, wenn man diese den anderen mysql_*-Funktionen nicht mit übergibt. Das Singleton-Pattern ist meist auf Objekte angewendet implementiert, doch da es nur ein Muster ist, kann man es auf alle möglichen Dinge anwenden, auch auf eine PHP-Ressourcenkennung. Von dem Singleton lässt du dir explizit die Verbindungskennung geben und gibst sie an die anderen mysql_*()-Funktionen weiter. Somit haben sie keinen Grund mehr, sich über eine nicht vorhandene Verbindung zu beklagen.

Das Singleton-Pattern lässt sich in dem Fall mit einer Funktion implementieren, man braucht also noch nicht mal Objekte dazu.

function getConnection() {
  static $connection = null;

if ($connection === null) {
    if ($connection = mysql_connect(...)) {
      mysql_select_db('...', $connection);
      // zu verwendende Zeichenkodierung einstellen
      mysql_set_charset('...', $connection); // ab PHP 5.2.3
      mysql_query('SET NAMES ...', $connection); // vor PHP 5.2.3
    } else {
      // Reaktion im Fehlerfall
      // z.B.: throw new Exception(mysql_error());
    }
  }
  return $connection;
}

Hier gibt es ein Problem mit dem Fehlerfall. Ein die() ist schnell eingefügt, aber nicht benutzerfreundlich. Im Fehlerfall ein false oder null zurückzugeben erhöht die Komplexität auf der "Anwender"seite, muss doch dort jedes Mal dieser Fall geprüft werden. Eine Exception böte sich an. Das trennt den normalen Ablauf vom Fehlerfall.

try {
    $sql = '...';
    if (!$result = mysql_query($sql, getConnection()))
      throw new Exception(mysql_error());

while ($row = mysql_fetch_...($result)) {
      do_something_with($row);
    }
  } catch (Exception $ex)
    // Reaktion im Fehlerfall
    echo "Tut uns leid, geht grad nicht. Bitte später nochmal probieren.";
    error_log(...);
  }

Den try-catch-Block muss man nicht unbedingt um jedes DB-Handling drumrumbauen. Man kann ihn je nach Programmstruktur und -verschachtelung auch "weiter außen" ansiedeln.

echo "$verabschiedung $name";