Poziční placeholdery v PDO v PHP

Pojďme se podívat, jak pracovat s pozičními placeholdery. Předpokládejme, že máme dvě proměnné, které chceme vložit do dotazu:

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

Předpokládejme, že chceme naše proměnné vložit následujícím způsobem:

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

To však není bezpečné. Místo přímého vkládání proměnných je proto nahradíme pozičními placeholdery, které jsou reprezentovány otazníky:

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

Nyní provedeme příkaz, který připraví dotaz:

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

Nyní provedeme dotaz předáním parametrů pole obsahujícího naše proměnné. Přitom se proměnné vloží do dotazu v pořadí, v jakém jsou uvedeny v poli:

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

Poté můžeme získat výsledek dotazu:

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

Shrňme vše dohromady a získáme následující kód:

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

Jsou dány proměnné:

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

Najděte všechny uživatele, jejichž věk nebo plat se rovnají zadaným hodnotám v proměnných.

Задание 2

Zkuste provést SQL-injekci do vašeho kódu. Ověřte, že se nezdaří.