Позиционни placeholders в PDO в PHP
Нека разберем как да работим с позиционни placeholders. Да предположим, че имаме две променливи, които искаме да вмъкнем в заявката:
<?php
$min = 1;
$max = 5;
?>
Да предположим, че искаме да вмъкнем нашите променливи по следния начин:
<?php
$sql = "SELECT * FROM users WHERE id>$min and id<$max";
?>
Това обаче не е безопасно. Затова вместо директно да вмъкваме променливите, нека ги заменим с позиционни placeholders, които се представят със знаци въпросителни:
<?php
$sql = 'SELECT * FROM users WHERE id>? and id<?';
?>
Сега нека изпълним команда, която подготви заявката:
<?php
$res = $pdo->prepare($sql);
?>
Сега нека изпълним заявката, като й предадем като параметри масив, съдържащ нашите променливи. В този случай променливите ще бъдат вмъкнати в заявката в реда, в който са указани в масива:
<?php
$res->execute([$min, $max]);
?>
След това можем да получим резултата от заявката:
<?php
while ($row = $res->fetch()) {
var_dump($row);
}
?>
Нека съберем всичко заедно и получим следния код:
<?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);
}
?>
Дадени са променливите:
<?php
$age = 30;
$salary = 1000;
?>
Намерете всички потребители, чиито възраст или заплата са равни на зададените в променливите стойности.
Опитайте се да извършите SQL-инжекция във вашия код. Уверете се, че тя няма да успее.