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
Libérer: 2024-12-06 10:48:11
original
511 Les gens l'ont consulté

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 %?%";
Copier après la connexion

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%'];
Copier après la connexion

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();
Copier après la connexion

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'; 
}
Copier après la connexion

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'; 
}

?>
Copier après la connexion

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