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
$min = 1;
$max = 5;
?>
Predpokladajme, že chceme vložiť naše premenné nasledovným spôsobom:
<?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
$sql = 'SELECT * FROM users WHERE id>? and id<?';
?>
Teraz vykonajte príkaz, ktorý pripraví dopyt:
<?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
$res->execute([$min, $max]);
?>
Potom môžeme získať výsledok dopytu:
<?php
while ($row = $res->fetch()) {
var_dump($row);
}
?>
Dajme všetko dokopy a získame nasledujúci kód:
<?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);
}
?>
Dané premenné:
<?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.
Skúste vykonať SQL-injekciu do vášho kódu. Presvedčte sa, že neprejde.