Posisjonale plassholdere i PDO i PHP

La oss finne ut hvordan vi jobber med posisjonale plassholdere. La oss si at vi har to variabler som vi ønsker å sette inn i spørringen:

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

La oss si at vi ønsker å sette inn variablene våre på følgende måte:

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

Dette er imidlertid ikke trygt. Så i stedet for å sette inn variablene direkte, erstatter vi dem med posisjonale plassholdere, som er spørsmålstegn:

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

La oss nå utføre kommandoen som forbereder spørringen:

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

La oss nå utføre spørringen ved å sende en array som inneholder variablene våre som parametere. Variablene vil bli satt inn i spørringen i den rekkefølgen de er oppgitt i arrayen:

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

Etter dette kan vi hente resultatet av spørringen:

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

La oss sette 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

Følgende variabler er gitt:

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

Finn alle brukere som har alder eller lønn lik verdiene gitt i variablene.

Задание 2

Prøv å utføre en SQL-injeksjon i koden din. Forsikre deg om at det ikke vil lykkes.