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
Linda Hamiltonoriginal
2024-12-03 08:23:10275parcourir

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 %??%";
    }
}

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 );

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!

Déclaration:
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