Pozičné zástupné symboly v PDO v PHP

Poďme zistiť, ako pracovať s pozícnými zástupnými symbolmi. Predpokladajme, že máme dve premenné, ktoré by sme chceli vložiť do dopytu:

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

Predpokladajme, že chceme vložiť naše premenné nasledovným spôsobom:

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

Takto to však nie je bezpečné. Preto namiesto priameho vkladania premenných ich nahradíme pozícnymi zástupnými symbolmi, ktoré predstavujú otázniky:

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

Teraz vykonajte príkaz, ktorý pripraví dopyt:

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

Teraz vykonajte dopyt odovzdaním parametrov pole, ktoré obsahuje naše premenné. Zároveň sa premenné vložia do dopytu v takom poradí, v akom sú uvedené v poli:

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

Potom môžeme získať výsledok dopytu:

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

Dajme všetko dokopy a získame nasledujúci 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

Dané premenné:

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

Nájdite všetkých používateľov, ktorých vek alebo plat sú rovné zadaným hodnotám v premenných.

Задание 2

Skúste vykonať SQL-injekciu do vášho kódu. Presvedčte sa, že neprejde.