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
$min = 1;
$max = 5;
?>
Oletame, et soovime oma muutujad sisestada järgmisel viisil:
<?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
$sql = 'SELECT * FROM users WHERE id>? and id<?';
?>
Nüüd käivitame käs, mis ettevalmistab päringu:
<?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
$res->execute([$min, $max]);
?>
Pärast seda saame päringu tulemuse:
<?php
while ($row = $res->fetch()) {
var_dump($row);
}
?>
Kogume kõik kokku ja saame järgmise koodi:
<?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);
}
?>
Antud muutujad:
<?php
$age = 30;
$salary = 1000;
?>
Leia kõik kasutajad, kelle vanus või palk on võrdsed muutujates määratud väärtustega.
Proovige läbi viia SQL-injektsiooni teie koodi. Veenduge, et see ei õnnestu.