DB Kurs Naechste Lektion

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.

VorteilWarum wichtig?
Prepared StatementsSchuetzen vor vielen SQL-Injection-Problemen.
FehlermodusFehler werden klarer sichtbar.
Fetch-MethodenDaten koennen als Arrays gelesen werden.

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

  1. Schreibe eine Datei database.php, die eine PDO-Verbindung erstellt.
  2. Lies alle User aus und gib sie als HTML-Liste aus.
  3. Schreibe eine Abfrage fuer alle User mit mindestens 50 Punkten.
  4. Fuege mit Prepared Statement einen neuen User ein.
  5. Erhoehe Punkte eines Users mit Prepared Statement.
  6. Loesche einen Test-User mit Prepared Statement.
  7. Erklaere, warum direkte SQL-Strings mit User-Eingaben gefaehrlich sind.
Weiter zu phpMyAdmin Praxis