Maison > développement back-end > tutoriel php > Comment créer efficacement des requêtes LIKE dynamiques avec des instructions préparées mysqli ?

Comment créer efficacement des requêtes LIKE dynamiques avec des instructions préparées mysqli ?

Linda Hamilton
Libérer: 2024-12-03 08:23:10
original
219 Les gens l'ont consulté

How to Efficiently Build Dynamic LIKE Queries with mysqli Prepared Statements?

Requêtes LIKE dynamiques utilisant des instructions préparées mysqli

Cette question aborde le problème de la création d'une instruction préparée avec un nombre variable de conditions LIKE basées sur entrée de l'utilisateur. Le code PHP fourni tente de construire l'instruction, mais il y a une erreur liée au formatage des clauses LIKE.

Le problème clé réside dans l'endroit où les signes de pourcentage (%) sont placés autour des paramètres (?) dans les clauses LIKE. Au lieu d'envelopper les paramètres, les signes de pourcentage doivent entourer les espaces réservés, comme indiqué ci-dessous :

foreach ( $search_exploded as $search_each ) {
    $x ++;
    if ( $x == 1 ) {
        $construct .= "name LIKE %??%";
    } else {
        $construct .= " or name LIKE %??%";
    }
}
Copier après la connexion

Cette correction garantit que les valeurs des paramètres (par exemple, "mon nom") sont correctement liées aux clauses LIKE. .

De plus, le code utilise une chaîne concaténée ($construct) pour construire la clause WHERE. Cependant, une approche plus efficace et plus sécurisée consiste à utiliser un tableau d'espaces réservés bind_param() pour tous les paramètres, comme indiqué ci-dessous :

$where_params = [];
foreach ( $search_exploded as $search_each ) {
    $where_params[] = "%{$search_each}%";
}

$query = "SELECT * FROM info WHERE name LIKE ?";
$stmt = mysqli_prepare( $conn, $query );
mysqli_stmt_bind_param( $stmt, "s", ...$where_params );
Copier après la connexion

Cette méthode gère gracieusement un certain nombre de conditions LIKE et élimine le risque d'injection SQL. vulnérabilités.

Avec ces modifications, la requête dynamique LIKE peut rechercher correctement des enregistrements en fonction de plusieurs critères définis par l'utilisateur.

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal