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
$min = 1;
$max = 5;
?>
Oletetaan, että haluamme lisätä muuttujamme seuraavalla tavalla:
<?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
$sql = 'SELECT * FROM users WHERE id>? and id<?';
?>
Suoritetaan nyt komento, joka valmistelee kyselyn:
<?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
$res->execute([$min, $max]);
?>
Tämän jälkeen voimme saada kyselyn tuloksen:
<?php
while ($row = $res->fetch()) {
var_dump($row);
}
?>
Kootaan kaikki yhteen ja saadaan seuraava koodi:
<?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);
}
?>
Annetut muuttujat:
<?php
$age = 30;
$salary = 1000;
?>
Etsi kaikki käyttäjät, joiden ikä tai palkka ovat yhtä suuria kuin muuttujissa annetut arvot.
Yritä suorittaa SQL-injektio koodiisi. Varmista, että se ei onnistu.