Positionelle pladsholdere i PDO i PHP

Lad os finde ud af, hvordan man arbejder med positionelle pladsholdere. Antag, at vi har to variable, som vi gerne vil indsætte i forespørgslen:

php<?php
  $min = 1;
  $max = 5;
?>

Antag, at vi vil indsætte vores variable på følgende måde:

php<?php
  $sql = "SELECT * FROM users WHERE id>$min and id<$max";
?>

Dette er imidlertid ikke sikkert at gøre. Derfor, i stedet for at indsætte variable direkte, erstatter vi dem med positionelle pladsholdere, som repræsenteres af spørgsmålstegn:

php<?php
  $sql = 'SELECT * FROM users WHERE id>? and id<?';
?>

Lad os nu udføre kommandoen, som forbereder forespørgslen:

php<?php
  $res = $pdo->prepare($sql);
?>

Lad os nu udføre forespørgslen ved at give den parametre i form af en array, der indeholder vores variable. Her vil variable blive indsat i forespørgslen i den rækkefølge, de er angivet i arrayet:

php<?php
  $res->execute([$min, $max]);
?>

Herefter kan vi hente resultatet af forespørgslen:

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

Lad os samle alt sammen og få følgende kode:

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

Der er givet variable:

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

Find alle brugere, hvis alder eller løn er lig med de værdier, der er angivet i variablene.

Задание 2

Prøv at udføre en SQL-injektion i din kode. Vær sikker på, at det ikke vil lykkes.