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<?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<?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<?php
  $sql = 'SELECT * FROM users WHERE id>? and id<?';
?>

Nu kör vi kommandot som förbereder frågan:

php<?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<?php
  $res->execute([$min, $max]);
?>

Efter detta kan vi få resultatet av frågan:

php<?php
  while ($row = $res->fetch()) {
    var_dump($row);
  }
?>

Låt oss sätta ihop allt och få följande kod:

php<?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);
  }
?>
Задание 1

Följande variabler är givna:

php<?php
  $age = 30;
  $salary = 1000;
?>

Hitta alla användare som har ålder eller lön lika med de värden som anges i variablerna.

Задание 2

Försök att genomföra en SQL-injektion i din kod. Var säker på att det inte kommer att lyckas.