Maison >développement back-end >tutoriel php >Comment créer une requête SELECT de condition LIKE dynamique dans MySQLi à l'aide d'instructions préparées ?

Comment créer une requête SELECT de condition LIKE dynamique dans MySQLi à l'aide d'instructions préparées ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-06 10:48:11508parcourir

How to Build a Dynamic LIKE Condition SELECT Query in MySQLi Using Prepared Statements?

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

Problème

Les utilisateurs peuvent saisir un nombre variable de termes de recherche et un la requête correspondante doit être construite dynamiquement sur la base de ces termes. L'objectif est de créer une instruction préparée qui s'adapte à cette entrée dynamique.

Solution

Construction de l'expression de requête :

Enveloppez chaque terme de recherche dans un Condition LIKE avec des espaces réservés pour les valeurs de liaison (% ?).

Exemple :

$construct .= "name LIKE %?%";

Paramètres de liaison :

Emballez les types de données et les valeurs d'entrée dans un seul tableau en utilisant l'opérateur splat (...).

Exemple :

$parameters = ['sss', '%Bill%', '%N_d%', '%Dave%'];

Préparation et exécution de la déclaration :

Préparer la déclaration avec la clause WHERE dynamique et liez les paramètres.

$stmt = $mysqli->prepare('SELECT * FROM info WHERE ' . implode(' OR ', $conditions));
$stmt->bind_param(...$parameters);
$stmt->execute();

Récupération Résultats :

Exécutez la requête et récupérez les résultats si nécessaire.

$result = $stmt->get_result();
foreach ($result as $row) {
    echo '<div>' . $row['name'] . '</div>\n'; 
}

Exemple de code corrigé :

<?php
$string = "my name";
$search_exploded = explode(" ", $string);
$num = count($search_exploded);

$conditions = [];
$parameters = [''];
foreach (array_unique($search_exploded) 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'; 
}

?>

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