Positionaaliset paikkamerkit PDO:ssa PHP:ssä

Selvitetään, kuinka positionaalisia paikkamerkkejä käytetään. Oletetaan, että meillä on kaksi muuttujaa, jotka haluaisimme lisätä kyselyyn:

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

Oletetaan, että haluamme lisätä muuttujamme seuraavalla tavalla:

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

Tämä ei kuitenkaan ole turvallista. Sen sijaan, että lisäisimme muuttujat suoraan, korvaamme ne positionaalisilla paikkamerkeillä, jotka ovat kysymysmerkkejä:

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

Suoritetaan nyt komento, joka valmistelee kyselyn:

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

Suoritetaan nyt kysely välittämällä sille parametreina taulukko, joka sisältää muuttujamme. Tässä tapauksessa muuttujat lisätään kyselyyn siinä järjestyksessä, kuin ne on määritelty taulukossa:

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

Tämän jälkeen voimme saada kyselyn tuloksen:

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

Kootaan kaikki yhteen ja saadaan seuraava koodi:

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

Annetut muuttujat:

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

Etsi kaikki käyttäjät, joiden ikä tai palkka ovat yhtä suuria kuin muuttujissa annetut arvot.

Задание 2

Yritä suorittaa SQL-injektio koodiisi. Varmista, että se ei onnistu.