Пазіцыйныя плэйсхолдары ў PDO ў PHP
Давайце разбярэмся, як працаваць з пазіцыйнымі плэйсхолдарамі. Хай у нас ёсць дзве зменныя, якія мы хацелі б уставіць у запыт:
<?php
$min = 1;
$max = 5;
?>
Хай мы хочам уставіць нашы зменныя наступным чынам:
<?php
$sql = "SELECT * FROM users WHERE id>$min and id<$max";
?>
Так, аднак, рабіць не бяспечна. Таму замест таго, каб устаўляць зменныя напрямую, замянім іх на пазіцыйныя плэйсхолдары, якія прадстаўляюць сабой знакі пытанняў:
<?php
$sql = 'SELECT * FROM users WHERE id>? and id<?';
?>
Цяпер выканаем каманду, якая падрыхтуе запыт:
<?php
$res = $pdo->prepare($sql);
?>
Цяпер выканаем запыт, перадаўшы яму параметрамі масіў, які змяшчае нашы зменныя. Пры гэтым зменныя будуць устаўлены ў запыт у такім парадку, як яны ўказаны ў масіве:
<?php
$res->execute([$min, $max]);
?>
Пасля гэтага можам атрымаць вынік запыту:
<?php
while ($row = $res->fetch()) {
var_dump($row);
}
?>
Сабярэм усё разам і атрымаем наступны код:
<?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);
}
?>
Дадзены зменныя:
<?php
$age = 30;
$salary = 1000;
?>
Знайдзіце ўсіх карыстальнікаў, у якіх узрост або зарплата роўныя зададзеным у зменных значэнням.
Паспрабуйце правесці SQL-ін'екцыю ў ваш код. Пераканайцеся, што яна не пройдзе.