Pozycyjne placeholder-y w PDO w PHP
Zastanówmy się, jak pracować z pozycyjnymi placeholder-ami. Załóżmy, że mamy dwie zmienne, które chcielibyśmy wstawić do zapytania:
<?php
$min = 1;
$max = 5;
?>
Załóżmy, że chcemy wstawić nasze zmienne w następujący sposób:
<?php
$sql = "SELECT * FROM users WHERE id>$min and id<$max";
?>
Jednakże tak postępowanie nie jest bezpieczne. Dlatego zamiast wstawiać zmienne bezpośrednio, zamieńmy je na pozycyjne placeholder-y, które reprezentują znaki zapytania:
<?php
$sql = 'SELECT * FROM users WHERE id>? and id<?';
?>
Teraz wykonajmy komendę, która przygotuje zapytanie:
<?php
$res = $pdo->prepare($sql);
?>
Teraz wykonajmy zapytanie, przekazując mu parametrami tablicę, zawierającą nasze zmienne. Przy tym zmienne zostaną wstawione do zapytania w takiej kolejności, jak są one wskazane w tablicy:
<?php
$res->execute([$min, $max]);
?>
Po tym możemy uzyskać wynik zapytania:
<?php
while ($row = $res->fetch()) {
var_dump($row);
}
?>
Zbierzmy wszystko razem i uzyskajmy następujący kod:
<?php
$min = 1;
$max = 5;
$sql = 'SELECT * FROM users WHERE id>? and id<?';
$res = $pdo->prepare($sql);
$res->execute([$min, $max]);
while ($row = $res->fetch()) {
var_dump($row);
}
?>
Dane są zmienne:
<?php
$age = 30;
$salary = 1000;
?>
Znajdź wszystkich użytkowników, u których wiek lub pensja są równe wartościom podanym w zmiennych.
Spróbuj przeprowadzić SQL-injection w swoim kodzie. Upewnij się, że ona nie przejdzie.