Operacje CRUD w PHP i MySQL
Definicja CRUD (Create, Read, Update, Delete)
CRUD to akronim opisujący cztery podstawowe operacje, które można wykonać na danych w systemie zarządzania bazą danych. Umiejętność ich implementacji to podstawa tworzenia każdej dynamicznej aplikacji internetowej.
- **C (Create):** Tworzenie nowego rekordu (SQL: `INSERT`)
- **R (Read):** Odczyt danych (SQL: `SELECT`)
- **U (Update):** Modyfikacja istniejącego rekordu (SQL: `UPDATE`)
- **D (Delete):** Usuwanie rekordu (SQL: `DELETE`)
C CREATE (Dodawanie Danych)
Instrukcja `INSERT` służy do dodawania nowych wierszy do tabeli. Dane pochodzą zazwyczaj z formularza przetworzonego przez `$_POST`.
SQL: INSERT
VALUES (:imie, :email, :haslo);
Implementacja PHP (PDO Prepared Statement)
// Zakładamy, że $pdo jest połączony
if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST['imie'])) {
$imie = $_POST['imie'];
$email = $_POST['email'];
$sql = "INSERT INTO uzytkownicy (imie, email) VALUES (?, ?)";
$stmt = $pdo->prepare($sql);
// Wykonanie zapytania z danymi z formularza
$stmt->execute([$imie, $email]);
echo "Dodano nowego użytkownika.";
}
?>
R READ (Odczyt Danych)
Instrukcja `SELECT` służy do pobierania danych. W kontekście CRUD zazwyczaj używamy jej do wyświetlenia wszystkich rekordów lub pojedynczego rekordu (np. na stronie szczegółów).
SQL: SELECT (Odczyt pojedynczy)
Implementacja PHP (PDO)
$id_produktu = 5;
$sql = "SELECT nazwa, cena FROM produkty WHERE id = ?";
$stmt = $pdo->prepare($sql);
$stmt->execute([$id_produktu]);
$produkt = $stmt->fetch();
if ($produkt) {
echo "Nazwa: {$produkt['nazwa']}, Cena: {$produkt['cena']} zł";
} else {
echo "Nie znaleziono produktu.";
}
?>
U UPDATE (Modyfikacja Danych)
Instrukcja `UPDATE` służy do zmiany wartości w istniejących wierszach. **Kluczowe jest użycie klauzuli `WHERE`, aby określić, który rekord ma zostać zmieniony (zazwyczaj przez jego ID).**
SQL: UPDATE
WHERE id = :id_ksiazki;
Implementacja PHP (PDO Prepared Statement)
$nowy_tytul = "Wiedźmin: Ostatnie Życzenie";
$id_ksiazki = 10;
$sql = "UPDATE ksiazki SET tytul = ? WHERE id = ?";
$stmt = $pdo->prepare($sql);
$stmt->execute([$nowy_tytul, $id_ksiazki]);
echo "Zaktualizowano {$stmt->rowCount()} rekordów.";
?>
D DELETE (Usuwanie Danych)
Instrukcja `DELETE` służy do trwałego usuwania wierszy. Podobnie jak w `UPDATE`, klauzula `WHERE` jest niezbędna, aby uniknąć usunięcia całej zawartości tabeli!
SQL: DELETE
Implementacja PHP (PDO Prepared Statement)
// ID użytkownika do usunięcia, np. przekazane przez GET
$id_do_usuniecia = $_GET['user_id'] ?? 0;
// Ważne! WHERE musi być zawsze użyte z ID.
$sql = "DELETE FROM uzytkownicy WHERE id = ?";
$stmt = $pdo->prepare($sql);
$stmt->execute([$id_do_usuniecia]);
if ($stmt->rowCount() > 0) {
echo "Pomyślnie usunięto użytkownika ID: $id_do_usuniecia.";
} else {
echo "Nie znaleziono użytkownika do usunięcia.";
}
?>
Ćwiczenie Zadania Praktyczne (Pełny CRUD)
Zadanie 1: Dodawanie i Odczyt (CREATE & READ)
Utwórz aplikację do dodawania zadań (ToDo) do tabeli zadania (id INT, opis VARCHAR).
Zadanie 2: Aktualizacja i Usuwanie (UPDATE & DELETE - Ponadpodstawowe)
Rozbuduj aplikację ToDo o możliwość modyfikacji i usuwania.
Materiały Narzędzia i Linki
- **PHP Manual PDO:** Prepared Statements (Konieczna lektura dla bezpieczeństwa).
- **SQL CRUD:** Wyszukaj "SQL INSERT UPDATE DELETE examples" dla przypomnienia składni SQL.
- **Bezpieczeństwo:** Zawsze traktuj `$_GET` i `$_POST` jako niezaufane dane.