Maison > développement back-end > tutoriel php > Comment créer une instruction préparée MySQLi sécurisée avec des conditions LIKE variables ?

Comment créer une instruction préparée MySQLi sécurisée avec des conditions LIKE variables ?

DDD
Libérer: 2024-12-04 11:39:15
original
1002 Les gens l'ont consulté

How to Build a Secure MySQLi Prepared Statement with Variable LIKE Conditions?

Création d'une requête SELECT avec des conditions LIKE variables en tant qu'instruction préparée mysqli

Lorsque vous travaillez avec une entrée utilisateur, il est essentiel de préparer des instructions pour éviter Injections SQL et garantie de l’intégrité des données. Cela devient difficile lorsque le nombre de conditions LIKE est variable.

Aperçu du problème

L'extrait de code tente de résoudre ce problème en créant dynamiquement les conditions LIKE en fonction de la saisie de l'utilisateur. . Cependant, il ne parvient pas à formater correctement les paramètres de l'instruction préparée.

Solution

La solution réside dans le placement des caractères génériques % autour des paramètres, et non des espaces réservés. Cela garantit que les paramètres sont utilisés pour filtrer la requête.

Explication détaillée

  1. Initialiser les ingrédients :

    a. Créez un tableau d'expressions de clause WHERE à l'aide d'OR.
    b. Déterminez les types de données des valeurs (dans ce cas, des chaînes).
    c. Combinez les types de données et les paramètres dans un seul tableau.

  2. Préparer les conditions :

    a. Convertissez les entrées de l'utilisateur en un tableau de valeurs uniques.
    b. Pour chaque valeur, créez une expression LIKE.
    c. Mettez à jour le tableau des paramètres pour inclure les types de données et les valeurs génériques.

  3. Préparer la requête :

    a. Commencez par une requête SELECT * de base.
    b. S'il y a des conditions, ajoutez une clause WHERE avec les expressions dynamiques.

  4. Lier les paramètres et exécuter :

    a. Liez le tableau de paramètres à l'instruction préparée à l'aide de l'opérateur splat (...).
    b. Exécutez l'instruction et récupérez les résultats le cas échéant.

Exemple de code :

$string = "Bill N_d Dave";

$conditions = [];
$parameters = [''];
foreach (array_unique(explode(' ', $string)) as $value) {
    $conditions[] = "name LIKE ?";
    $parameters[0] .= 's';
    $parameters[] = "%{$value}%";
}

$query = "SELECT * FROM info";
if ($conditions) {
    $stmt = $mysqli->prepare($query . ' WHERE ' . implode(' OR ', $conditions));
    $stmt->bind_param(...$parameters);
    $stmt->execute();
    $result = $stmt->get_result();
} else {
    $result = $conn->query($query);
}

foreach ($result as $row) {
    echo "<div>{$row['name']}</div>\n";
}
Copier après la connexion

Remarques supplémentaires :

  • Si aucune condition n'est spécifiée, exécutez la requête sans WHERE clause.
  • Envisagez d'utiliser addcslashes() pour échapper aux caractères génériques dans les entrées utilisateur, si nécessaire.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal