Позиционные плейсхолдеры в PDO в PHP
Давайте разберемся, как работать с позиционными плейсхолдерами. Пусть у нас есть две переменных, которые мы хотели бы вставить в запрос:
<?php
$min = 1;
$max = 5;
?>
Пусть мы хотим вставить наши переменные следующим образом:
<?php
$sql = "SELECT * FROM users WHERE id>$min and id<$max";
?>
Так, однако, делать не безопасно. Поэтому вместо того, чтобы вставлять переменные напрямую, заменим их на позиционные плейсхолдеры, которые представляют собой знаки вопросов:
<?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-инъекцию в ваш код. Убедитесь, что она не пройдет.