dedlfix: MySQL-Connect in jeder Datei, oder nur wenn gebraucht?

Beitrag lesen

echo $begrüßung;

Ich habe am Anfang jeder Datei immer ein paar include-Anweisungen stehen. Nun dachte ich mir, könnte ich ja auch einfach immer mein mysql.inc includen.
Ich wäre dann zwar immer mit meinem MySQL-Server verbunden, aber hätte in Dateien, in denen ich es brauche, Vorteile davon.

Dieses Problem lässt sich mit dem Singleton-Pattern lösen. Das Singleton-Pattern gibt immer die selbe und nur diese eine Instanz zurück und initialisiert diese vorher bei Bedarf. Wenn man keine Klasse dafür verwenden möchte (was aber auch eine gute Idee wäre, Datenbankaufrufe zu zentralisieren) und/oder nur PHP4 zur Verfügung hat, kann man eine statische Variable in einer Funktion verwenden, die Verbindung zu speichern.

function dbConnection() {  
  static $conn = null;  
  
  // bei erstmaligem Aufruf der Funktion die Verbindung öffnen  
  if ($conn === null) {  
    $conn = initialisierung;  
    // fehlerbehandlung  
  }  
  return $conn;  
}

Wo soll ich eigentlich meine mysql.inc (Datei mit Passwort und Usernamen der MySQL-Benutzerdaten, also zum connecten) hinpacken?

Am besten außerhalb des DocumentRoot. Einige Provider lassen es zu, dass man das DocumentRoot seiner Domains auf Unterverzeichnisse zeigen lassen kann. Somit kann man Dateien oberhalb davon anlegen. PHP kann darauf zugreifen, und man braucht keine Zugriffsbeschränkungen mit .htaccess oder ähnlich einzurichten, die im Fehlerfall (.htaccess aus Versehen gelöscht und nicht bemerkt) nicht mehr wirken.

Ich dachte, man kann keinen PHP-Code auslesen, oder?

Solange der Webserver so konfiguriert ist, dass er die fragliche Datei vor dem Ausliefern zuerst PHP vorlegt - was bei .inc möglicherweise nicht der Fall ist - und PHP wie gewünscht arbeitet, bekommt der Anfordernde keinen PHP-Code zu Gesicht.

echo "$verabschiedung $name";