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.
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!