Instrukcje przygotowane i bindowanie parametrów
Używaj prepare, bindParam i execute, aby zapobiegać SQL injection
Instrukcje przygotowane i bindowanie parametrów to bezpłatna lekcja PHP Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej PHP Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs PHP Academy zawiera 4 lekcji w sumie.
Dlaczego warto używać zapytań przygotowanych?
Zapytania przygotowane oddzielają strukturę SQL od danych. Dane wejściowe użytkownika są zawsze traktowane jako wartość — nigdy jako kod SQL — co uniemożliwia SQL injection.
prepare() + execute()
Podstawowy schemat działania: przygotuj zapytanie z symbolami zastępczymi, a następnie wykonaj je z wartościami.
<?php
$stmt = $pdo->prepare("SELECT * FROM users WHERE email = ?");
$stmt->execute([$_POST["email"]]);
$user = $stmt->fetch();Nazwane placeholdery
Używaj nazwanych placeholderów (:name), aby zwiększyć czytelność, szczególnie gdy ta sama wartość występuje wiele razy.
<?php
$stmt = $pdo->prepare(
"INSERT INTO users (name, email) VALUES (:name, :email)"
);
$stmt->execute([':name' => "Alice", ':email' => "alice@example.com"]);bindParam a bindValue
bindParam wiąże zmienną przez referencję — wartość jest odczytywana w momencie wykonania. bindValue wiąże wartość od razu.
<?php
$name = "Bob";
$stmt = $pdo->prepare("INSERT INTO users (name) VALUES (:name)");
$stmt->bindParam(":name", $name);
$name = "Carol";
$stmt->execute(); // inserts "Carol"Przykład bindValue
Użyj bindValue, gdy chcesz ustalić wartość już w momencie wiązania.
<?php
$stmt = $pdo->prepare("SELECT * FROM products WHERE price < :max");
$stmt->bindValue(":max", 50.00, PDO::PARAM_INT);
$stmt->execute();Stałe typów
Opcjonalny trzeci parametr określa typ danych: PDO::PARAM_INT, PDO::PARAM_STR, PDO::PARAM_BOOL, PDO::PARAM_NULL.
Ponowne wykonywanie instrukcji
Przygotowaną instrukcję można wykonać wiele razy — zapytanie jest kompilowane na serwerze tylko raz.
<?php
$stmt = $pdo->prepare("INSERT INTO logs (msg) VALUES (:msg)");
foreach ($messages as $msg) {
$stmt->execute([':msg' => $msg]);
}rowCount()
Po wykonaniu INSERT/UPDATE/DELETE metoda rowCount() zwraca liczbę zmodyfikowanych wierszy.
<?php
$stmt = $pdo->prepare("DELETE FROM users WHERE active = 0");
$stmt->execute();
echo $stmt->rowCount()." users deleted";lastInsertId()
Po wykonaniu INSERT pobierz klucz główny z autoinkrementacją za pomocą $pdo->lastInsertId().
<?php
$stmt = $pdo->prepare("INSERT INTO articles (title) VALUES (:t)");
$stmt->execute([':t' => "My Post"]);
$newId = $pdo->lastInsertId();Nigdy nie łącz danych wejściowych użytkownika
Nigdy nie rób tego: "SELECT * FROM users WHERE name = '".$name."'". Zawsze używaj symboli zastępczych — nawet jeśli dane wejściowe zostały „oczyszczone”.
Obiekt PDOStatement
prepare() zwraca obiekt PDOStatement zawierający: execute(), fetch(), fetchAll(), bindParam(), bindValue(), rowCount().
Podsumowanie
Zawsze używaj zapytań przygotowanych w przypadku zapytań zawierających dane zewnętrzne. Preferuj nazwane placeholdery. Używaj bindValue dla wartości ustalanych od razu, a bindParam dla wiązań w pętlach.
Szybkie sprawdzenie
Kiedy bindParam odczytuje swoją wartość?
Często zadawane pytania
Czy lekcja „Instrukcje przygotowane i bindowanie parametrów” jest bezpłatna?
Tak — pełny tekst „Instrukcje przygotowane i bindowanie parametrów” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu PHP Academy, przejdź na CoddyKit PRO. Kurs PHP Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Instrukcje przygotowane i bindowanie parametrów”?
Używaj prepare, bindParam i execute, aby zapobiegać SQL injection Ćwiczysz PHP Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć PHP Academy?
Nie wymagamy żadnego doświadczenia. PHP Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.
Ile czasu zajmuje lekcja „Instrukcje przygotowane i bindowanie parametrów”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji PHP Academy?
Tak. Każda lekcja PHP Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Łączenie z MySQL za pomocą PDO
- Instrukcje przygotowane i bindowanie parametrów
- Pobieranie wyników za pomocą PDO
- Transakcje z PDO