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<?php
  $min = 1;
  $max = 5;
?>

Załóżmy, że chcemy wstawić nasze zmienne w następujący sposób:

php<?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<?php
  $sql = 'SELECT * FROM users WHERE id>? and id<?';
?>

Teraz wykonajmy komendę, która przygotuje zapytanie:

php<?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<?php
  $res->execute([$min, $max]);
?>

Po tym możemy uzyskać wynik zapytania:

php<?php
  while ($row = $res->fetch()) {
    var_dump($row);
  }
?>

Zbierzmy wszystko razem i uzyskajmy następujący kod:

php<?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);
  }
?>
Задание 1

Dane są zmienne:

php<?php
  $age = 30;
  $salary = 1000;
?>

Znajdź wszystkich użytkowników, u których wiek lub pensja są równe wartościom podanym w zmiennych.

Задание 2

Spróbuj przeprowadzić SQL-injection w swoim kodzie. Upewnij się, że ona nie przejdzie.