Placeholders posicionais no PDO em PHP
Vamos entender como trabalhar com placeholders posicionais. Suponha que temos duas variáveis que gostaríamos de inserir na consulta:
<?php
$min = 1;
$max = 5;
?>
Suponha que queremos inserir nossas variáveis da seguinte forma:
<?php
$sql = "SELECT * FROM users WHERE id>$min and id<$max";
?>
No entanto, isso não é seguro. Portanto, em vez de inserir as variáveis diretamente, vamos substituí-las por placeholders posicionais, que são representados por pontos de interrogação:
<?php
$sql = 'SELECT * FROM users WHERE id>? and id<?';
?>
Agora, vamos executar o comando que preparará a consulta:
<?php
$res = $pdo->prepare($sql);
?>
Agora, execute a consulta, passando como parâmetros um array contendo nossas variáveis. Neste caso, as variáveis serão inseridas na consulta na ordem em que estão especificadas no array:
<?php
$res->execute([$min, $max]);
?>
Depois disso, podemos obter o resultado da consulta:
<?php
while ($row = $res->fetch()) {
var_dump($row);
}
?>
Vamos juntar tudo e obter o seguinte código:
<?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);
}
?>
São dadas as variáveis:
<?php
$age = 30;
$salary = 1000;
?>
Encontre todos os usuários cuja idade ou salário sejam iguais aos valores definidos nas variáveis.
Tente realizar uma injeção SQL no seu código. Certifique-se de que ela não será bem-sucedida.