Позиционни placeholders в PDO в PHP

Нека разберем как да работим с позиционни placeholders. Да предположим, че имаме две променливи, които искаме да вмъкнем в заявката:

php<?php
  $min = 1;
  $max = 5;
?>

Да предположим, че искаме да вмъкнем нашите променливи по следния начин:

php<?php
  $sql = "SELECT * FROM users WHERE id>$min and id<$max";
?>

Това обаче не е безопасно. Затова вместо директно да вмъкваме променливите, нека ги заменим с позиционни placeholders, които се представят със знаци въпросителни:

php<?php
  $sql = 'SELECT * FROM users WHERE id>? and id<?';
?>

Сега нека изпълним команда, която подготви заявката:

php<?php
  $res = $pdo->prepare($sql);
?>

Сега нека изпълним заявката, като й предадем като параметри масив, съдържащ нашите променливи. В този случай променливите ще бъдат вмъкнати в заявката в реда, в който са указани в масива:

php<?php
  $res->execute([$min, $max]);
?>

След това можем да получим резултата от заявката:

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

Нека съберем всичко заедно и получим следния код:

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

Дадени са променливите:

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

Намерете всички потребители, чиито възраст или заплата са равни на зададените в променливите стойности.

Задание 2

Опитайте се да извършите SQL-инжекция във вашия код. Уверете се, че тя няма да успее.