Pozicionális helykitöltők a PDO-ban PHP-ben
Értsük meg, hogyan kell dolgozni a pozicionális helykitöltőkkel. Tegyük fel, hogy van két változónk, amiket be szeretnénk illeszteni a lekérdezésbe:
<?php
$min = 1;
$max = 5;
?>
Tegyük fel, hogy a változóinkat a következő módon szeretnénk beilleszteni:
<?php
$sql = "SELECT * FROM users WHERE id>$min and id<$max";
?>
Ez azonban nem biztonságos. Ezért a változók közvetlen beillesztése helyett cseréljük ki őket pozicionális helykitöltőkre, amelyek kérdőjelek:
<?php
$sql = 'SELECT * FROM users WHERE id>? and id<?';
?>
Most hajtsuk végre azt a parancsot, amely előkészíti a lekérdezést:
<?php
$res = $pdo->prepare($sql);
?>
Most hajtsuk végre a lekérdezést úgy, hogy paraméterként átadjuk neki a változóinkat tartalmazó tömböt. Eközben a változók abban a sorrendben kerülnek be a lekérdezésbe, ahogyan a tömbben meg vannak adva:
<?php
$res->execute([$min, $max]);
?>
Ezután megkaphatjuk a lekérdezés eredményét:
<?php
while ($row = $res->fetch()) {
var_dump($row);
}
?>
Gyűjtsük össze az egészet, és kapjuk a következő kódot:
<?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);
}
?>
Adottak a változók:
<?php
$age = 30;
$salary = 1000;
?>
Keresse meg az összes olyan felhasználót, akinek a kora vagy a fizetése megegyezik a változókban megadott értékekkel.
Próbáljon meg SQL-injektálást végrehajtani a kódjában. Győződjön meg róla, hogy az nem fog sikerülni.