Позиционные плейсхолдеры в PDO в PHP

Давайте разберемся, как работать с позиционными плейсхолдерами. Пусть у нас есть две переменных, которые мы хотели бы вставить в запрос:

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

Пусть мы хотим вставить наши переменные следующим образом:

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

Так, однако, делать не безопасно. Поэтому вместо того, чтобы вставлять переменные напрямую, заменим их на позиционные плейсхолдеры, которые представляют собой знаки вопросов:

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-инъекцию в ваш код. Убедитесь, что она не пройдет.