INF.03Backend & PHP
PDO (PHP Data Objects) i Prepared Statements
Lekka, spójna warstwa abstrakcji dostępu do baz danych w PHP, zabezpieczająca aplikację przed atakami SQL Injection dzięki zapytaniom parametryzowanym.
Połączenie z bazą i Prepared Statements w PDO:
PHP
<?php
$dsn = 'mysql:host=localhost;dbname=sklep;charset=utf8mb4';
$user = 'root';
$pass = '';
try {
$pdo = new PDO($dsn, $user, $pass, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
]);
// Bezpieczne zapytanie z parametrem wiązanym:
$stmt = $pdo->prepare('SELECT id, nazwa, cena FROM produkty WHERE kategoria_id = :kat AND cena < :cena');
$stmt->execute([
':kat' => 3,
':cena' => 100.00
]);
$produkty = $stmt->fetchAll();
foreach ($produkty as $p) {
echo htmlspecialchars($p['nazwa']) . ' - ' . $p['cena'] . ' zł<br>';
}
} catch (PDOException $e) {
echo 'Błąd połączenia z bazą: ' . $e->getMessage();
}Dlaczego PDO jest lepsze od mysqli?
- Wspiera wiele różnych silników baz danych (MySQL, PostgreSQL, SQLite, Oracle), podczas gdy mysqli obsługuje tylko MySQL.
- Wymusza czystą obsługę wyjątków (
PDOException). - Pozwala na bezpieczne parametryzowanie zapytań (Prepared Statements).
Najczęstsze pułapki na egzaminie INF.03:
- Pamiętaj, aby zawsze ustawić kodowanie znaków w DSN (
charset=utf8mb4), aby uniknąć problemów z polskimi znakami.
Chcesz sprawdzić to pojęcie w praktyce?
Przeszukaj pytania z oficjalnych arkuszy CKE powiązane z hasłem PDO (PHP Data Objects) i Prepared Statements lub rozpocznij trening.