Positsioonilised kohatäitjad PDO-s PHP-s

Mõtleme välja, kuidas töötada positsiooniliste kohatäitjatega. Oletame, et meil on kaks muutujat, mida soovime päringusse sisestada:

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

Oletame, et soovime oma muutujad sisestada järgmisel viisil:

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

See ei ole aga turvaline. Selle asemel, et muutujad otse sisestada, asendame need positsiooniliste kohatäitjatega, mida esindavad küsimärgid:

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

Nüüd käivitame käs, mis ettevalmistab päringu:

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

Nüüd käivitame päringu, edastades sellele parameetritena massiivi, mis sisaldab meie muutujaid. Samal ajal sisestatakse muutujad päringusse sellises järjekorras, nagu need on massiivis määratud:

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

Pärast seda saame päringu tulemuse:

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

Kogume kõik kokku ja saame järgmise koodi:

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

Antud muutujad:

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

Leia kõik kasutajad, kelle vanus või palk on võrdsed muutujates määratud väärtustega.

Задание 2

Proovige läbi viia SQL-injektsiooni teie koodi. Veenduge, et see ei õnnestu.