Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
datenbank_oeffnen [2015/02/10 12:24] webproducer angelegt |
datenbank_oeffnen [2016/07/08 00:00] (aktuell) |
||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
===== Datenbank mit PDO öffnen ===== | ===== Datenbank mit PDO öffnen ===== | ||
- | Zum Öffnen einer Datenbank wird ein neues Objekt der Klasse "PDO" erstellt. | + | Für die Erstellung einer Datenbankverbindung wird generell nur ein neues Objekt der Klasse "PDO" erzeugt. Beispiel: |
- | define( 'DB_HOST', '127.0.0.1' ); | + | <code php> |
- | define( 'DB_USER', 'DB_User' ); | + | $DB = new PDO( 'mysql:host=localhost;dbname=databasename', 'root', '' ); |
- | define( 'DB_PASS', 'DB_Password' ); | + | </code> |
- | define( 'DB_NAME', 'DB_Name' ); | + | |
- | Beispiel für **MySQL**-Datenbanken: | + | Nach Möglichkeit sollte im Projekt nur eine Datenbankverbindung erstellt werden die von allen Funktionen und Klassen verwendet werden kann. Die Erstellung mehrerer Verbindungen zur gleichen Datenbank bedeuten unnötige Sicherheitsrisiken und Performancenachteile. |
- | $DB = new PDO( "mysql:host=" . DB_HOST . ";dbname=" . DB_DATABASE, DB_USER, DB_PASSWORD ); | + | Die Erstellung der Datenbankverbindung in einer PHP-Klasse, die durch andere Klassen (wie z. B. Models mit Datenbankzugriff) mit extended erweitert werden soll ist hierfür ungeeignet, da hier für jede erstellte Instanz automatisch eine eigene Datenbankverbindung erstellt wird. |
- | Beispiel für **PostgreSQL**-Datenbanken: | + | Die geeignetste Methode ist die Erstellung einer PHP-Klasse, die ein PDO-Objekt erstellt und dieses per globale Variable in allen Scripten zur Verfügung stellt. Diese Variable kann dann in allen Klassen, die einen Zugriff auf die Datenbank benötigen, im Constructor eingebunden werden. Idealerweise wird die Methode, also das Öffnen der Datenbankverbindung, in einer globalen Konfigurationsdatei aufgerufen, welche in jede Projektseite eingebunden wird. |
- | $DB = new PDO( "pgsql:host=" . DB_HOST . ";dbname=" . DB_DATABASE, DB_USER, DB_PASSWORD ); | + | <code php> |
+ | class Database | ||
+ | { | ||
+ | /** | ||
+ | * DB constructor. | ||
+ | */ | ||
+ | |||
+ | public static function openDB() | ||
+ | { | ||
+ | try | ||
+ | { | ||
+ | return new \PDO( 'mysql:host=localhost;dbname=databasename', 'root', '' ); | ||
+ | } | ||
+ | catch( PDOException $e ) | ||
+ | { | ||
+ | exit( 'Unable to connect Database. Error-Message: ' . $e->getMessage() ); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | $DB = Database::openDB(); // initiale database as global variable | ||
+ | |||
+ | class User | ||
+ | { | ||
+ | private $DB; | ||
+ | |||
+ | public function __construct() | ||
+ | { | ||
+ | global $DB; | ||
+ | $this->DB = $DB; | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | Jetzt repräsentiert die Variable $this->DB die geöffnete Datenbankverbindung und steht in der gesamten PHP-Klasse "User" zur Verfügung. | ||
+ | |||
+ | ===== Verbindung mit einer PostgreSQL-Datenbank herstellen: ===== | ||
+ | |||
+ | <code sql> | ||
+ | try { | ||
+ | $DB = new PDO( "pgsql:host=" . DB_HOST . ";dbname=" . DB_NAME, DB_USER, DB_PASS ); | ||
+ | } | ||
+ | catch( PDOException $e ) { | ||
+ | exit('Unable to connect Database.'); | ||
+ | } | ||
+ | </code> |