Warum PHP und PostgreSQL – Liebe auf den ersten Query?
\n\nDie Welt der Webentwicklung ist voller Stereotype. Einer davon besagt: „PHP ist nur mit MySQL befreundet.“ Ein Körnchen Wahrheit steckt darin, aber nur so lange, bis Sie die Kombination PHP und PostgreSQL ausprobieren. Es ist wie der Wechsel vom Fahrrad zum Sportmotorrad: dieselben Räder, aber Geschwindigkeit, Wendigkeit und Zuverlässigkeit sind völlig anders.
\n\nPostgreSQL ist nicht nur eine Datenbank. Es ist ein objektrelationales Monster, das mit JSON, Geodaten, Volltextsuche und komplexesten Transaktionen umgehen kann. Und PHP ist der ideale Dirigent für dieses Orchester. In dieser Anleitung behandeln wir alles: von der Installation des Treibers bis zum Schreiben von production-ready Code. Los geht's!
\n\n1. Installation und Einrichtung: Werkzeuge bereitmachen
\n\nBevor wir Code schreiben, stellen wir sicher, dass PHP von der Existenz von PostgreSQL weiß. In den meisten modernen PHP-Distributionen (z. B. XAMPP, OpenServer, Docker) ist die Erweiterung pdo_pgsql bereits vorhanden, muss aber aktiviert werden.
1.1. Erweiterung in php.ini aktivieren
\n\nÖffnen Sie Ihre php.ini und kommentieren Sie die folgende Zeile ein (entfernen Sie das Semikolon am Anfang):
extension=pdo_pgsql\n\nWenn Sie Linux verwenden, sieht die Installation wie folgt aus:
\n\nsudo apt-get install php-pgsql\nsudo service apache2 restart # oder nginx + php-fpm\n\n1.2. Datenbank und Benutzer erstellen
\n\nGehen Sie in die PostgreSQL-Konsole:
\n\nsudo -u postgres psql\n\nJetzt erstellen wir eine Datenbank und einen Benutzer für unser Projekt:
\n\nCREATE DATABASE pythonlib_blog;\nCREATE USER myapp WITH PASSWORD 'SuperSecret123';\nGRANT ALL PRIVILEGES ON DATABASE pythonlib_blog TO myapp;\n\\q\n\nFertig. Jetzt haben wir eine Datenbank pythonlib_blog und einen Benutzer myapp.
2. Erste Verbindung: PDO als Standard
\n\nVerwenden Sie niemals die alten Funktionen pg_connect(). Im modernen PHP gibt es PDO (PHP Data Objects) – eine einheitliche Schnittstelle für die Arbeit mit verschiedenen Datenbanken. Es ist sicherer, bequemer und unterstützt vorbereitete Abfragen.
2.1. Wrapper-Klasse für die Verbindung
\n\nErstellen wir eine einfache Klasse Database, die die Verbindung verwaltet:
<?php\n\nclass Database {\n private static ?PDO $instance = null;\n private const DB_HOST = 'localhost';\n private const DB_PORT = 5432;\n private const DB_NAME = 'pythonlib_blog';\n private const DB_USER = 'myapp';\n private const DB_PASS = 'SuperSecret123';\n\n public static function getConnection(): PDO {\n if (self::$instance === null) {\n $dsn = "pgsql:host=" . self::DB_HOST . ";port=" . self::DB_PORT . ";dbname=" . self::DB_NAME;\n try {\n self::$instance = new PDO($dsn, self::DB_USER, self::DB_PASS, [\n PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,\n PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,\n PDO::ATTR_EMULATE_PREPARES => false,\n ]);\n } catch (PDOException $e) {\n die("Connection failed: " . $e->getMessage());\n }\n }\n return self::$instance;\n }\n}\n\nWarum ist das cool? Erstens, Singleton – wir erstellen keine neue Verbindung bei jeder Anfrage. Zweitens zwingt ATTR_EMULATE_PREPARES => false PostgreSQL dazu, echte vorbereitete Abfragen zu verwenden, anstatt eine Emulation auf PHP-Seite. Das erhöht Leistung und Sicherheit.
3. CRUD-Operationen: Erstellen, Lesen, Aktualisieren, Löschen
\n\nJetzt kommt das Wesentliche. Angenommen, wir haben eine Tabelle articles für Artikel auf pythonlib.ru.
3.1. Tabelle erstellen
\n\nFühren Sie dieses SQL in Ihrer Datenbank aus (über psql oder das Admin-Panel):
\n\nCREATE TABLE articles (\n id SERIAL PRIMARY KEY,\n title VARCHAR(255)