0Pricing
PHP Academy · Lekcja

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

  1. Łączenie z MySQL za pomocą PDO
  2. Instrukcje przygotowane i bindowanie parametrów
  3. Pobieranie wyników za pomocą PDO
  4. Transakcje z PDO
← Powrót do PHP Academy