Datenbankverbindung
Aus php bar
Inhaltsverzeichnis |
Herstellung einer Datenbankverbindung
Code
anwendung.php
1 // oeffne Verbindung zum Datenbankserver 2 $db_verbindung = mysql_connect( 'localhost', 'mysql_user', 'mysql_password' ); 3 if ( ! $db_verbindung ) { 4 die( 'Konnte keine Verbindung herstellen: ' . mysql_error() ); 5 } 6 7 // wähle Datenbank 8 $erfolg = mysql_select_db( 'MeineDB', $db_verbindung ); 9 if ( ! $erfolg ) { 10 die ( 'Kann Datenbank "MeineDB" nicht auswählen : ' . mysql_error() ); 11 } 12 13 $result = mysql_query( 'SELECT ...' );
oder kurz:
1 // öffne Verbindung zum Datenbankserver 2 mysql_connect( 'localhost', 'mysql_user', 'mysql_password' ) 3 or die( 'Konnte keine Verbindung herstellen : ' . mysql_error() ); 4 5 // wähle Datenbank 6 mysql_select_db( 'MeineDB' ) 7 or die ( 'Kann Datenbank "MeineDB" nicht auswählen : ' . mysql_error() ); 8 9 $ergebnis = mysql_query( 'SELECT ...' );
Trennung von Code und Konfiguration
Zur besseren Konfigurierbarkeit und weil sich der eigentliche Code im Gegensatz zu Verbindungsparametern wohl seltener ändern wird, sollte man eine Trennung zwischen Code und Verbindungsparametern vornehmen. Dies geschieht in dem man die Parameter in Variablen oder Konstanten ablegt.
config.inc.php
1 // Verbindungsdaten für die Datenbank 2 /** Hostname des Datenbankservers */ 3 define( 'DB_HOST', 'localhost' ); 4 5 /** Benutzername mit dem auf die Datenbank zugegriffen wird */ 6 define( 'DB_USER', 'Benutzer' ); 7 8 /** Passwort des verwendeten Benutzers */ 9 define( 'DB_PASS', 'Passwort' ); 10 11 /** Name der zu verwendenden Datenbank */ 12 define( 'DB_NAME', 'MeineDB' );
anwendung.php
1 require_once 'config.inc.php'; 2 3 // öffne Verbindung zum Datenbankserver 4 mysql_connect( DB_HOST, DB_USER, DB_PASS ) 5 or die( 'Konnte keine Verbindung herstellen : ' . mysql_error() ); 6 7 // wähle Datenbank 8 mysql_select_db( DB_NAME ) 9 or die ( 'Kann Datenbank "' . DB_NAME . '" nicht auswählen : ' . mysql_error() ); 10 11 $ergebnis = mysql_query( 'SELECT ...' );
als Include
Damit man nicht überall wo man die Datenbankverbindung benötigt den Code dafür neu schreiben muss erstellt man ihn einmal und legt in einer Datei ab welche man dann an den benötigten Stellen im Programm einbindet (includiert).
config.inc.php
1 // Verbindungsdaten für die Datenbank 2 /** Hostname des Datenbankservers */ 3 define( 'DB_HOST', 'localhost' ); 4 5 /** Benutzername mit dem auf die Datenbank zugegriffen wird */ 6 define( 'DB_USER', 'Benutzer' ); 7 8 /** Passwort des verwendeten Benutzers */ 9 define( 'DB_PASS', 'Passwort' ); 10 11 /** Name der zu verwendenden Datenbank */ 12 define( 'DB_NAME', 'MeineDB' );
db.inc.php
1 require_once 'config.inc.php'; 2 3 // öffne Verbindung zum Datenbankserver 4 mysql_connect( DB_HOST, DB_USER, DB_PASS ) 5 or die( 'Konnte keine Verbindung herstellen : ' . mysql_error() ); 6 7 // wähle Datenbank 8 mysql_select_db( DB_NAME ) 9 or die ( 'Kann Datenbank "' . DB_NAME . '" nicht auswählen : ' . mysql_error() );
anwendung.php
1 require_once 'db.inc.php'; 2 3 $ergebnis = mysql_query( 'SELECT ...' );
als Funktion
Um den Nachteil das bei einem Einbinden des Verbindungscodes bei jedem ausführen der Seite, egal ob die DB-Verbindung benötigt wird oder nicht, zu umgehen kann man das ganz auch in eine Funktion packen, welche dann die Verbindung erst herstellt wenn sie benötigt wird.
db.lib.php
1 require_once 'config.inc.php'; 2 3 /** 4 * führt eine Datenbankabfrage durch und gibt das Ergebnis zurück 5 * falls noch keine Datenbankverbindung besteht wird diese hergestellt 6 * 7 * @uses mysql_connect() 8 * @uses mysql_select_db() 9 * @uses mysql_error() 10 * @uses mysql_query() 11 * 12 * @param string SQL-Abfrage 13 * @return result|boolean Ergebnis der Abfrage 14 */ 15 function dbAbfrage( $query ) 16 { 17 static $db_verbindung = NULL; 18 19 // wenn noch keine Datenbankverbindung besteht 20 if ( NULL === $db_verbindung ) 21 { 22 $db_verbindung = mysql_connect( DB_HOST, DB_USER, DB_PASS ) 23 or die( mysql_error() ); 24 25 mysql_select_db( DB_NAME, $db_verbindung ) 26 or die( mysql_error() ); 27 } 28 29 $result = mysql_query( $query ) 30 or die( mysql_error() ); 31 32 // return result 33 return $result; 34 }
anwendung.php
1 require_once 'db.lib.php'; 2 3 $ergebnis = dbAbfrage( 'SELECT ...' );
als Objekt
anwendung.php
1 require_once 'DB.php'; // PEAR::DB Modul laden 2 3 $dsn = 'mysql://user:pass@localhost/dbname'; 4 5 $dbh = DB::connect($dsn); 6 if (DB::isError($dbh)) { 7 trigger_error('Verbindung zur Datenbank fehlgeschlagen: '. 8 $dbh->getMessage(), E_USER_ERROR); 9 } 10 11 // mit dem $dbh-handler arbeiten... 12
Trennen der Verbindung
Normalerweise wird eine Trennung der Datenbankverbindung nicht benötigt, da dies automatisch erfolgt mit dem Ende des Scripts. Man kann dies allerdings auch explizit veranlassen.
Code
1 mysql_close( $db_verbindung );
oder kurz:
1 mysql_close();
bei Include
..todo...
bei Funktion
..todo... register_shutdown ...
bei Objekt
..todo... __sleep()

