Segnaposti posizionali in PDO in PHP

Scopriamo come lavorare con i segnaposti posizionali. Supponiamo di avere due variabili che vorremmo inserire nella query:

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

Supponiamo di voler inserire le nostre variabili nel seguente modo:

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

Tuttavia, questo non è sicuro. Quindi, invece di inserire le variabili direttamente, sostituiamole con segnaposti posizionali, che sono rappresentati da punti interrogativi:

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

Ora eseguiamo il comando che preparerà la query:

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

Ora eseguiamo la query, passandole come parametri un array contenente le nostre variabili. In questo caso le variabili verranno inserite nella query nell'ordine in cui sono specificate nell'array:

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

Dopodiché possiamo ottenere il risultato della query:

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

Mettiamo tutto insieme e otteniamo il seguente codice:

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

Sono date le variabili:

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

Trova tutti gli utenti, la cui età o stipendio sono uguali ai valori specificati nelle variabili.

Задание 2

Prova a eseguire un SQL-injection nel tuo codice. Verifica che non vada a buon fine.