PHP MySQL przygotowane sprawozdania
Przygotowane sprawozdania, aby zapobiec iniekcji MySQL jest bardzo przydatna.
Przygotowane sprawozdania i parametry bound
Przygotowane sprawozdania dotyczące wykonywania wielu tej samej instrukcji SQL i wykonać bardziej efektywnie.
Prace sporządzanych sprawozdań w następujący sposób:
Gruntowanie: Tworzenie szablonu SQL oświadczenie wysłane do bazy danych. Wartość parametru zastrzeżone "?" Mark. Na przykład:
INSERT INTO MyGuests (firstname, lastname, email) VALUES(?, ?, ?)
Analiza bazy danych, kompilacja, wykonanie instrukcji SQL szablonu optymalizację zapytań i zapisuje wynik nie jest wyjście.
Wykonanie: Na koniec, wartości parametrów przekazywanych do wiązania (znak "?") Aplikacji, bazy danych wykonuje instrukcje. Aplikacje mogą być wykonywane tyle razy, jeżeli wartość parametru nie jest taka sama.
W porównaniu do bezpośredniego wykonywania instrukcji SQL, przygotowane zestawienie ma dwie główne zalety:
Przygotowane sprawozdania dramatycznie skraca czas analizy, tylko zapytania (choć instrukcje są wykonywane).
Związane parametry zmniejszyć przepustowość serwera, wystarczy tylko wysłać zapytanie parametru zamiast całej wypowiedzi.
Przygotowane sprawozdania przed SQL injection jest bardzo przydatna, ponieważ po użyciu różnych protokołów do wysyłania wartości parametrów w celu zapewnienia legitymacji danych.
MySQLi sporządziły sprawozdania
Poniższy przykład używa mysqli w przygotowanym oświadczeniu i powiązać odpowiednie parametry:
Przykłady (MySQLi wykorzystaniem przygotowanych sprawozdań)
$ Servername = "localhost";
$ Username = "username";
$ Password = "password";
$ Dbname = "MojaBD";
// Tworzenie połączenia
$ Conn = new mysqli ($ nazwa_serwera, $ username, $ password, $ dbname);
// Test połączenia
if ($ conn-> connect_error) {
die ( "Połączenie nie powiodło się:" $ conn-> connect_error.);
}
// Wstępna i wiążące
$ Stmt = $ conn-> prepare ( "INSERT INTO MyGuests (imię, nazwisko, e-mail) VALUES (,,) ???");
$ Stmt-> bind_param ( "sss", $ imię, Nazwisko $, $ e-mail);
// Ustawiamy parametry i wykonać
$ Imię = "John";
$ Nazwisko = "Kowalski";
$ Email = "john@example.com";
$ Stmt-> execute ();
$ Imię = "Mary";
$ Nazwisko = "Moe";
$ Email = "mary@example.com";
$ Stmt-> execute ();
$ Imię = "Julie";
$ Nazwisko = "Dooley";
$ Email = "julie@example.com";
$ Stmt-> execute ();
echo "Nowa płyta jest włożona pomyślnie";
$ Stmt-> close ();
$ Conn-> close ();
?>
Podczas analizowania każdej linii kodu w poniższych przykładach:
W instrukcji SQL, używamy znaku zapytania (?), Można tu wymienić znak zapytania całkowitą, łańcuch, podwójnej precyzji zmiennoprzecinkowych i wartości logiczne.
Następnie spójrzmy na bind_param () funkcję:
Parametry funkcji SQL wiązania i powiedz wartość parametru bazy danych. "SSS" typy danych parametrów przetwarzania kolumny dla pozostałych parametrów. s znaków bazy danych, która opowiada łańcuchu parametrów.
Istnieją cztery rodzaje parametrów:
- I - liczba całkowita (integer)
- d - podwójna (pkt zmiennoprzecinkowych podwójnej precyzji)
- s - łańcuch (string)
- b - BLOB (duży obiekt binarny: blob)
Każdy parametr jest wymagany, aby określić typ.
Parametr typ danych opowiada bazy danych, można zmniejszyć ryzyko wystąpienia SQL injection.
Uwaga: Jeśli chcesz wstawić dodatkowych danych wejściowych (user), weryfikacja danych jest bardzo ważne. |
PDO przygotowane oświadczeń w
Poniższe przykłady używamy przygotowanych oświadczeń w PDO i parametrów wiążących:
Przykłady (PDO z wykorzystaniem przygotowanych sprawozdań)
$ Servername = "localhost";
$ Username = "username";
$ Password = "password";
$ Dbname = "myDBPDO";
try {
$ Conn = new PDO ( "mysql: host = $ nazwa_serwera; nazwa_bd = $ nazwa_bd" $ username, $ password);
// Ustawienie trybu wyjątek błędu PDO
$ Conn-> setAttribute (PDO :: ATTR_ERRMODE, PDO :: ERRMODE_EXCEPTION);
// wstępnego oczyszczania i SQL parametry wiązania
$ Stmt = $ conn-> prepare ( "INSERT INTO MyGuests (imię, nazwisko, e-mail)
VALUES (: Imię Nazwisko ,: ,: e) ");
$ Stmt-> bindParam ( 'Imię', $ Imię);
$ Stmt-> bindParam ( 'Nazwisko', $ Nazwisko);
$ Stmt-> bindParam ( 'email', $ e-mail);
// Wstaw wiersz
$ Imię = "John";
$ Nazwisko = "Kowalski";
$ Email = "john@example.com";
$ Stmt-> execute ();
// Insert kolejny wiersz
$ Imię = "Mary";
$ Nazwisko = "Moe";
$ Email = "mary@example.com";
$ Stmt-> execute ();
// Insert kolejny wiersz
$ Imię = "Julie";
$ Nazwisko = "Dooley";
$ Email = "julie@example.com";
$ Stmt-> execute ();
echo "Nowa płyta jest włożona pomyślnie";
}
catch (PDOException $ e)
{
pl Echo $ sql "Największa" $ e-> getMessage ();
}
$ Conn = null;
?>