Positionsbaserade platshållare i PDO i PHP
Låt oss ta reda på hur man arbetar med positionsbaserade platshållare. Låt oss säga att vi har två variabler som vi skulle vilja sätta in i frågan:
<?php
$min = 1;
$max = 5;
?>
Låt oss säga att vi vill sätta in våra variabler på följande sätt:
<?php
$sql = "SELECT * FROM users WHERE id>$min and id<$max";
?>
Detta är dock inte säkert att göra. Därför, istället för att sätta in variablerna direct, ersätter vi dem med positionsbaserade platshållare, som representeras av frågetecken:
<?php
$sql = 'SELECT * FROM users WHERE id>? and id<?';
?>
Nu kör vi kommandot som förbereder frågan:
<?php
$res = $pdo->prepare($sql);
?>
Nu kör vi frågan genom att skicka parametrarna som en array som innehåller våra variabler. Variablerna kommer att sättas in i frågan i den ordning de är angivna i arrayen:
<?php
$res->execute([$min, $max]);
?>
Efter detta kan vi få resultatet av frågan:
<?php
while ($row = $res->fetch()) {
var_dump($row);
}
?>
Låt oss sätta ihop allt och få följande kod:
<?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);
}
?>
Följande variabler är givna:
<?php
$age = 30;
$salary = 1000;
?>
Hitta alla användare som har ålder eller lön lika med de värden som anges i variablerna.
Försök att genomföra en SQL-injektion i din kod. Var säker på att det inte kommer att lyckas.