Poziční placeholdery v PDO v PHP
Pojďme se podívat, jak pracovat s pozičními placeholdery. Předpokládejme, že máme dvě proměnné, které chceme vložit do dotazu:
<?php
$min = 1;
$max = 5;
?>
Předpokládejme, že chceme naše proměnné vložit následujícím způsobem:
<?php
$sql = "SELECT * FROM users WHERE id>$min and id<$max";
?>
To však není bezpečné. Místo přímého vkládání proměnných je proto nahradíme pozičními placeholdery, které jsou reprezentovány otazníky:
<?php
$sql = 'SELECT * FROM users WHERE id>? and id<?';
?>
Nyní provedeme příkaz, který připraví dotaz:
<?php
$res = $pdo->prepare($sql);
?>
Nyní provedeme dotaz předáním parametrů pole obsahujícího naše proměnné. Přitom se proměnné vloží do dotazu v pořadí, v jakém jsou uvedeny v poli:
<?php
$res->execute([$min, $max]);
?>
Poté můžeme získat výsledek dotazu:
<?php
while ($row = $res->fetch()) {
var_dump($row);
}
?>
Shrňme vše dohromady a získáme následující kód:
<?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);
}
?>
Jsou dány proměnné:
<?php
$age = 30;
$salary = 1000;
?>
Najděte všechny uživatele, jejichž věk nebo plat se rovnají zadaným hodnotám v proměnných.
Zkuste provést SQL-injekci do vašeho kódu. Ověřte, že se nezdaří.