Kursy i Poradniki IT - Adrian Kowalski
Kurs Programowania PHP dla Początkujących
O lekcji

Zapytania przygotowane i bindowanie parametrów to bezpieczny i efektywny sposób na interakcję z bazą danych w PHP przy użyciu PDO. Oto szczegółowe przykłady operacji CRUD.

1. Tworzenie (CREATE)

Dodanie nowego rekordu do tabeli uzytkownicy.

Kod:

<?php
// Połączenie z bazą danych
$dsn = 'mysql:host=localhost;dbname=mojabaza;charset=utf8mb4';
$username = 'root';
$password = '';

try {
    $pdo = new PDO($dsn, $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // Przygotowanie zapytania
    $sql = "INSERT INTO uzytkownicy (imie, nazwisko, email) VALUES (:imie, :nazwisko, :email)";
    $stmt = $pdo->prepare($sql);

    // Przypisanie wartości do parametrów
    $stmt->bindParam(':imie', $imie);
    $stmt->bindParam(':nazwisko', $nazwisko);
    $stmt->bindParam(':email', $email);

    // Wartości
    $imie = "Jan";
    $nazwisko = "Nowak";
    $email = "[email protected]";

    // Wykonanie zapytania
    $stmt->execute();
    echo "Nowy użytkownik został dodany.";
} catch (PDOException $e) {
    echo "Błąd: " . $e->getMessage();
}
?>

2. Odczyt (READ)

Pobranie wszystkich użytkowników z tabeli.

Kod:

<?php
try {
    // Przygotowanie zapytania
    $sql = "SELECT id, imie, nazwisko, email FROM uzytkownicy WHERE nazwisko = :nazwisko";
    $stmt = $pdo->prepare($sql);

    // Przypisanie wartości do parametrów
    $nazwisko = "Nowak";
    $stmt->bindParam(':nazwisko', $nazwisko);

    // Wykonanie zapytania
    $stmt->execute();

    // Pobranie wyników
    $results = $stmt->fetchAll(PDO::FETCH_ASSOC);

    foreach ($results as $row) {
        echo "ID: {$row['id']} - Imię: {$row['imie']} - Nazwisko: {$row['nazwisko']} - Email: {$row['email']}<br>";
    }
} catch (PDOException $e) {
    echo "Błąd: " . $e->getMessage();
}
?>

3. Aktualizacja (UPDATE)

Aktualizacja adresu e-mail użytkownika o podanym id.

Kod:

<?php
try {
    // Przygotowanie zapytania
    $sql = "UPDATE uzytkownicy SET email = :email WHERE id = :id";
    $stmt = $pdo->prepare($sql);

    // Przypisanie wartości do parametrów
    $stmt->bindParam(':email', $email);
    $stmt->bindParam(':id', $id);

    // Wartości
    $email = "[email protected]";
    $id = 1;

    // Wykonanie zapytania
    $stmt->execute();
    echo "Adres e-mail użytkownika został zaktualizowany.";
} catch (PDOException $e) {
    echo "Błąd: " . $e->getMessage();
}
?>

4. Usuwanie (DELETE)

Usunięcie użytkownika o podanym id.

Kod:

<?php
try {
    // Przygotowanie zapytania
    $sql = "DELETE FROM uzytkownicy WHERE id = :id";
    $stmt = $pdo->prepare($sql);

    // Przypisanie wartości do parametrów
    $stmt->bindParam(':id', $id);

    // Wartość
    $id = 1;

    // Wykonanie zapytania
    $stmt->execute();
    echo "Użytkownik został usunięty.";
} catch (PDOException $e) {
    echo "Błąd: " . $e->getMessage();
}
?>

Wyjaśnienia:

  1. Zapytania przygotowane:
    • Zapobiegają atakom SQL Injection, ponieważ dane wejściowe są traktowane jako dane, a nie część zapytania SQL.
    • Dzięki temu wstrzyknięcia kodu SQL, np. poprzez DROP TABLE, są niemożliwe.
  2. Metody bindowania parametrów:
    • bindParam():
      • Wiąże zmienną z nazwanym parametrem.
      • Zmienna jest oceniana dopiero w momencie wykonania zapytania (execute()).
    • bindValue():
      • Wiąże wartość bezpośrednio z parametrem, natychmiast.
  3. Tryb FETCH:
    • PDO::FETCH_ASSOC: Pobiera wyniki jako tablice asocjacyjne.
    • Inne tryby, takie jak PDO::FETCH_OBJ, mogą być używane w zależności od potrzeb.
  4. Obsługa błędów:
    • Ustawienie PDO::ATTR_ERRMODE na PDO::ERRMODE_EXCEPTION umożliwia przechwytywanie błędów za pomocą try-catch.

Te przykłady i wyjaśnienia pokazują pełne wykorzystanie PDO z bindowaniem parametrów w operacjach CRUD.