Lektion 06 - PHP & PDO
Mit PHP sicher auf MySQL zugreifen
PHP kann Daten aus MySQL lesen, speichern, aendern und loeschen. Wichtig ist: Wir schreiben keine unsicheren SQL-Strings mit User-Eingaben, sondern nutzen PDO und Prepared Statements.
1. Was ist PDO?
PDO bedeutet PHP Data Objects. Es ist eine PHP-Schnittstelle, mit der du auf Datenbanken zugreifen kannst. PDO hilft dir, sicherer und strukturierter mit SQL zu arbeiten.
2. Verbindung aufbauen
<?php
$host = 'localhost';
$database = 'coding_learning';
$user = 'root';
$password = '';
$dsn = "mysql:host=$host;dbname=$database;charset=utf8mb4";
$pdo = new PDO($dsn, $user, $password, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
]);
?>
charset=utf8mb4 sorgt dafuer, dass Umlaute und Emojis sauber gespeichert
werden koennen. Der Fehlermodus macht Datenbankfehler sichtbar.
3. SELECT mit PDO
<?php
$statement = $pdo->query('SELECT id, name, email, points FROM users');
$users = $statement->fetchAll();
foreach ($users as $user) {
echo $user['name'] . ' hat ' . $user['points'] . ' Punkte.<br>';
}
?>
fetchAll() liest alle Ergebniszeilen. Jede Zeile ist hier ein
assoziatives Array.
4. Prepared Statement mit WHERE
Sobald User-Eingaben in SQL landen, nutzt du Prepared Statements. Platzhalter verhindern, dass Eingaben direkt als SQL-Code interpretiert werden.
<?php
$minPoints = 50;
$statement = $pdo->prepare(
'SELECT id, name, points FROM users WHERE points >= :minPoints'
);
$statement->execute([
'minPoints' => $minPoints,
]);
$users = $statement->fetchAll();
?>
5. INSERT mit Prepared Statement
<?php
$name = 'Mina';
$email = 'mina@example.com';
$statement = $pdo->prepare(
'INSERT INTO users (name, email, points) VALUES (:name, :email, :points)'
);
$statement->execute([
'name' => $name,
'email' => $email,
'points' => 0,
]);
?>
6. UPDATE und DELETE
<?php
$statement = $pdo->prepare(
'UPDATE users SET points = points + :amount WHERE id = :id'
);
$statement->execute([
'amount' => 10,
'id' => 1,
]);
$deleteStatement = $pdo->prepare(
'DELETE FROM users WHERE id = :id'
);
$deleteStatement->execute([
'id' => 3,
]);
?>
Auch in PHP gilt: UPDATE und DELETE brauchen fast immer
eine sichere Bedingung.
7. Typische Ordnerstruktur
project/
config/
database.php
repositories/
UserRepository.php
public/
index.php
users.php
Die Datenbankverbindung gehoert nicht wild in jede Datei. Besser ist eine zentrale Datei und spaeter eigene Repository-Klassen fuer Datenbanklogik.
8. PHP-Uebungen
- Schreibe eine Datei
database.php, die eine PDO-Verbindung erstellt. - Lies alle User aus und gib sie als HTML-Liste aus.
- Schreibe eine Abfrage fuer alle User mit mindestens 50 Punkten.
- Fuege mit Prepared Statement einen neuen User ein.
- Erhoehe Punkte eines Users mit Prepared Statement.
- Loesche einen Test-User mit Prepared Statement.
- Erklaere, warum direkte SQL-Strings mit User-Eingaben gefaehrlich sind.