Positionele placeholders in PDO in PHP
Laten we eens kijken hoe we kunnen werken met positionele placeholders. Stel dat we twee variabelen hebben die we in de query willen invoegen:
<?php
$min = 1;
$max = 5;
?>
Stel dat we onze variabelen willen invoegen op de volgende manier:
<?php
$sql = "SELECT * FROM users WHERE id>$min and id<$max";
?>
Dit is echter niet veilig. Daarom vervangen we, in plaats van de variabelen direct in te voegen, ze door positionele placeholders, die vraagtekens zijn:
<?php
$sql = 'SELECT * FROM users WHERE id>? and id<?';
?>
Laten we nu de opdracht uitvoeren die de query voorbereidt:
<?php
$res = $pdo->prepare($sql);
?>
Laten we nu de query uitvoeren door een array, die onze variabelen bevat, als parameters door te geven. Hierbij worden de variabelen in de query ingevoegd in de volgorde zoals ze in de array zijn opgegeven:
<?php
$res->execute([$min, $max]);
?>
Daarna kunnen we het resultaat van de query ophalen:
<?php
while ($row = $res->fetch()) {
var_dump($row);
}
?>
Laten we alles samenvoegen en we krijgen de volgende code:
<?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);
}
?>
Gegeven variabelen:
<?php
$age = 30;
$salary = 1000;
?>
Vind alle gebruikers, waarvan de leeftijd of het salaris gelijk is aan de waarden in de variabelen.
Probeer een SQL-injectie uit te voeren in je code. Zorg ervoor dat het niet lukt.