Datenbankverbindung mit PHP
Erste Schritte – Datenbankverbindung mit PHP: PDO vs. mysqli
Sobald du in PHP Daten in einer MySQL- oder MariaDB-Datenbank speichern oder abfragen möchtest, benötigst du eine Datenbankverbindung. Mit dieser Verbindung führst du SQL-Befehle aus (z. B. SELECT, INSERT, UPDATE, DELETE), um deine Tabellen zu verwalten. In diesem Tutorial lernst du, wie du diese Verbindung herstellst, entweder mithilfe der älteren mysqli-Erweiterung oder mit der moderneren PDO-Variante.
1. Vorbereitungen
- Eine laufende MySQL/MariaDB-Datenbank (lokal via XAMPP/MAMP/LAMP oder auf deinem Hosting)
- Die Zugangsdaten: Host (z. B. localhost), Datenbankname, Benutzername und Passwort
- Optional: Kenntnis, ob du PDO oder mysqli verwenden möchtest
2. Verbindung mit mysqli
Die mysqli-Erweiterung (MySQL Improved) ist eine Weiterentwicklung der alten mysql-Extension. So stellst du eine Verbindung her:
$host = "localhost"; $user = "dbuser"; $pass = "dbpass"; $dbname = "meinedb"; $mysqli = new mysqli($host, $user, $pass, $dbname); // Fehlerprüfung if ($mysqli->connect_error) { die("Verbindungsfehler: " . $mysqli->connect_error); } echo "Erfolgreich verbunden!"; // Beispiel: einfache Query $sql = "SELECT * FROM users"; $result = $mysqli->query($sql); if ($result) { while ($row = $result->fetch_assoc()) { echo $row['username'] . "<br>"; } } else { echo "Abfragefehler: " . $mysqli->error; } // Verbindung schließen $mysqli->close();
- $mysqli = new mysqli(…) erzeugt das Objekt, das die Verbindung repräsentiert.
- connect_error enthält ggf. die Fehlermeldung, wenn der Connect scheiterte.
- query($sql) führt eine SQL-Abfrage aus, fetch_assoc() holt Ergebniszeilen als assoziatives Array.
3. Verbindung mit PDO (empfohlen)
Die PDO (PHP Data Objects)-Erweiterung ist eine flexible Datenbank-API, die mehrere DB-Systeme unterstützt (MySQL, PostgreSQL, etc.). Du arbeitest mit Prepared Statements, was sicherer ist gegen SQL-Injections.
$host = "localhost"; $dbname = "meinedb"; $user = "dbuser"; $pass = "dbpass"; $dsn = "mysql:host=$host;dbname=$dbname;charset=utf8mb4"; try { $pdo = new PDO($dsn, $user, $pass); echo "Erfolgreich verbunden mit PDO!"; } catch (PDOException $e) { die("DB-Fehler: " . $e->getMessage()); } // Beispiel: Prepared Statement $sql = "SELECT * FROM users WHERE email = :email"; $stmt = $pdo->prepare($sql); $stmt->bindValue(':email', 'test@example.com'); $stmt->execute(); $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); foreach ($rows as $row) { echo $row['username'] . "<br>"; }
- $dsn enthält den DSN-String („Data Source Name“) mit Host, DB-Name und Zeichensatz.
- new PDO() versucht die Verbindung. Scheitert es, löst es eine PDOException aus.
- prepare() und bindValue() ermöglichen sicheres Binden von Parametern, um SQL-Injection zu vermeiden.
4. Unterschiede und Vorteile
- mysqli: Spezifisch für MySQL/MariaDB. Recht einfach für reine MySQL-Umgebungen. Unterstützt auch Prepared Statements (allerdings nicht so einheitlich wie PDO).
- PDO: Einheitliche Schnittstelle für verschiedene Datenbanken. Bietet flexibles Error-Handling über Exceptions. In professionellen Projekten meist bevorzugt.
5. Häufige Fehlerquellen
- Falsche Zugangsdaten (Host, User, Passwort, DB-Name)
- Fehlerhafte Zeichenkodierung (fehlendes charset=utf8mb4) => Umlaute-Probleme
- Vergessene Fehlerprüfung (keine Abfrage, was $mysqli->error oder PDOException sagt)
- Vergessener DB-Schluss => $mysqli->close() oder am Ende Script => PDO schließt selbst bei Skriptende, aber man kann es manuell machen.
6. Beispiel: Einfacher Insert mit PDO
$pdo = new PDO("mysql:host=localhost;dbname=meinedb", "user", "pass"); // Datensatz einfügen $sql = "INSERT INTO users (username, email) VALUES (:uname, :mail)"; $stmt = $pdo->prepare($sql); $stmt->bindValue(':uname', 'lisa123'); $stmt->bindValue(':mail', 'lisa@example.com'); $stmt->execute(); $id = $pdo->lastInsertId(); echo "Neuer Datensatz mit ID $id eingefügt.";
Hier wird ein neuer Eintrag in „users“ erzeugt. lastInsertId() liefert die automatisch vergebene ID (falls die Tabelle eine AUTO_INCREMENT-Spalte hat).
Fazit
Eine Datenbankverbindung in PHP aufzubauen, ist mit mysqli oder PDO relativ einfach. PDO wird oft bevorzugt, weil es universeller, sicherer und moderner ist. Mit der richtigen Verbindung, korrekten Zugangsdaten und ggf. Prepared Statements bist du in der Lage, Querys sicher auszuführen und deine Tabellen gezielt zu manipulieren. Achte immer auf sichere Fehlerbehandlung und auf die richtigen Kollation- und Zeichensatzeinstellungen, damit alle Daten sauber und sicher gespeichert werden.