Позициони плейсхолдери у 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-инјекцију у ваш код. Уверите се да неће проћи.