Позициони плейсхолдери у 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-инјекцију у ваш код. Уверите се да неће проћи.