PHP und PostgreSQL: Ein starkes Duo für die Webentwicklung

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Warum PHP und PostgreSQL – Liebe auf den ersten Query?

\n\n

Die 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\n

PostgreSQL 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\n

1. Installation und Einrichtung: Werkzeuge bereitmachen

\n\n

Bevor 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.

\n\n

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):

\n\n
extension=pdo_pgsql
\n\n

Wenn Sie Linux verwenden, sieht die Installation wie folgt aus:

\n\n
sudo apt-get install php-pgsql\nsudo service apache2 restart  # oder nginx + php-fpm
\n\n

1.2. Datenbank und Benutzer erstellen

\n\n

Gehen Sie in die PostgreSQL-Konsole:

\n\n
sudo -u postgres psql
\n\n

Jetzt erstellen wir eine Datenbank und einen Benutzer für unser Projekt:

\n\n
CREATE DATABASE pythonlib_blog;\nCREATE USER myapp WITH PASSWORD 'SuperSecret123';\nGRANT ALL PRIVILEGES ON DATABASE pythonlib_blog TO myapp;\n\\q
\n\n

Fertig. Jetzt haben wir eine Datenbank pythonlib_blog und einen Benutzer myapp.

\n\n

2. Erste Verbindung: PDO als Standard

\n\n

Verwenden 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.

\n\n

2.1. Wrapper-Klasse für die Verbindung

\n\n

Erstellen wir eine einfache Klasse Database, die die Verbindung verwaltet:

\n\n
<?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\n

Warum 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.

\n\n

3. CRUD-Operationen: Erstellen, Lesen, Aktualisieren, Löschen

\n\n

Jetzt kommt das Wesentliche. Angenommen, wir haben eine Tabelle articles für Artikel auf pythonlib.ru.

\n\n

3.1. Tabelle erstellen

\n\n

Führen Sie dieses SQL in Ihrer Datenbank aus (über psql oder das Admin-Panel):

\n\n
CREATE TABLE articles (\n    id SERIAL PRIMARY KEY,\n    title VARCHAR(255)                

Blogs

Buchempfehlungen