Pozicijski ograde v PDO v PHP
Poglejmo, kako delati s pozicijskimi ogradami. Recimo, da imamo dve spremenljivki, ki ju želimo vstaviti v poizvedbo:
<?php
$min = 1;
$max = 5;
?>
Recimo, da želimo vstaviti naši spremenljivki na naslednji način:
<?php
$sql = "SELECT * FROM users WHERE id>$min and id<$max";
?>
Toda to ni varno. Zato namesto neposredne vstavitve spremenljivk zamenjajmo s pozicijskimi ogradami, ki so predstavljene z vprašaji:
<?php
$sql = 'SELECT * FROM users WHERE id>? and id<?';
?>
Zdaj izvedimo ukaz, ki pripravi poizvedbo:
<?php
$res = $pdo->prepare($sql);
?>
Zdaj izvedimo poizvedbo in ji posredujemo parameter kot seznam, ki vsebuje naši spremenljivki. Pri tem se bodo spremenljivke vstavile v poizvedbo v takem zaporedju, kot so navedene v seznamu:
<?php
$res->execute([$min, $max]);
?>
Po tem lahko dobimo rezultat poizvedbe:
<?php
while ($row = $res->fetch()) {
var_dump($row);
}
?>
Zberimo vse skupaj in dobimo naslednjo kodo:
<?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);
}
?>
Podane so spremenljivke:
<?php
$age = 30;
$salary = 1000;
?>
Poiščite vse uporabnike, katerih starost ali plača sta enaki vrednostim, podanim v spremenljivkah.
Poskusite izvesti SQL-injekcijo v vašo kodo. Prepričajte se, da ne bo uspela.