J'ai une application web avec beaucoup de données, et une fonction de recherche/filtrage avec plusieurs champs, tels que le nom, l'état, la date, etc. J'utilise des requêtes paramétrées comme celui-ci pour les requêtes régulières (non recherche):Requête paramétrée avec plusieurs termes de recherche optionnels
$id = $_POST['itemID'];
$db = mysqli_connect($host, $username, $password, $database);
$sql_query = "SELECT * FROM tbl_data WHERE ID = ?";
$stmt_query = mysqli_prepare($db, $sql_query);
mysqli_stmt_bind_params($stmt_query, "i", $id);
mysqli_stmt_execute($stmt_query);
//and so on..
Comment puis-je protéger SQL-injection de agains avec plusieurs paramètres, en option? Il peut y avoir jusqu'à 10 paramètres distincts qui peuvent ou ne peuvent pas être définis.
Modifier que la question ne semble pas claire:
Mon exemple était avec un paramètre, ce qui est en option. Je sais que cela protège contre sql-injection. Comment est-ce que je ferais ceci avec 10 paramètres, où un ou plusieurs pourraient être placés en même temps? Par exemple. une requête comme celle-ci:
SELECT * FROM tbl_data
WHERE NAME = ?
AND STATUS = ?
AND DATE = ?
AND PARAM4 = ?
AND PARAM5 = ?
où l'utilisateur veut uniquement rechercher le nom et la date. Comment ferais-je la liaison? Ce n'est pas une bonne idée de vérifier chacune des 100 combinaisons possibles de termes de recherche.
Vous utilisez des paramètres liés sur des instructions préparées, de sorte que vous êtes automatiquement protégé contre l'injection SQL. L'injection SQL ne se présente que lorsque vous générez des requêtes sous la forme d'une chaîne à l'aide d'un contenu non contrôlé (non échappé) dérivé des soumissions d'utilisateur. les paramètres liés sont automatiquement échappés par le pilote de base de données, vous n'avez donc pas à vous en préoccuper. – Lee
@Lee, non, il ne l'est pas. Dans ce cas particulier, vous devez vous inquiéter. –