Position actuelle: Accueil> Derniers articles> Comment utiliser MySQLI :: STMT_INIT pour implémenter une recherche floue de mots clés efficace (comme la requête)

Comment utiliser MySQLI :: STMT_INIT pour implémenter une recherche floue de mots clés efficace (comme la requête)

M66 2025-06-23

Les requêtes de base de données sont l'une des opérations les plus courantes lors du développement d'applications PHP. Surtout lorsque vous traitez des volumes de données importants, comment améliorer l'efficacité des requêtes est notre objectif. Dans PHP, il est très courant d'utiliser l'extension MySQLI pour exécuter des requêtes de base de données, et MySQLI :: STMT_INIT est un excellent outil qui peut nous aider à exécuter des instructions de prétraitement, à améliorer l'efficacité et la sécurité de la requête.

Cet article présentera comment réaliser une recherche floue efficace par mot-clé via mysqli :: stmt_init , en particulier comment interroger en utilisant des mots clés comme SQL.

1. Instructions de prétraitement et mysqli :: stmt_init

Dans PHP, MySQLI fournit la méthode MySQLI :: STMT_INIT pour initialiser une instruction de prétraitement. Cela signifie que les requêtes SQL seront précompilées puis exécutées par des paramètres de liaison, évitant le risque d'injection SQL. Les instructions de prétraitement assurent non seulement une sécurité, mais offrent également de meilleures performances lors de l'exécution de la même requête.

grammaire

 $stmt = $mysqli->stmt_init();

2. Pourquoi utiliser comme pour la requête floue

Comme les mots clés sont souvent utilisés dans SQL pour implémenter des requêtes floues. Il est généralement utilisé pour trouver des chaînes qui correspondent à certains motifs. Dans une requête floue, % représente n'importe quel caractère (y compris zéro caractères) et _ représente n'importe quel caractère unique.

Par exemple:

 SELECT * FROM users WHERE username LIKE '%admin%';

Cette requête renverra tous les enregistrements du nom d'utilisateur contenant admin .

3. Utilisez MySqli :: STMT_INIT et aimez implémenter une recherche floue efficace

Ensuite, nous montrerons comment utiliser MySQLI :: STMT_INIT pour implémenter une recherche floue efficace de mot-clé. Supposons que nous devons rechercher les utilisateurs de la base de données, et les critères de recherche sont que le nom d'utilisateur contient un certain mot-clé.

Étape 1: Initialisez la connexion de la base de données

Tout d'abord, nous devons nous connecter à la base de données:

 $mysqli = new mysqli("localhost", "username", "password", "database");

// Vérifiez la connexion
if ($mysqli->connect_error) {
    die("Connection failed: " . $mysqli->connect_error);
}

Étape 2: Initialiser la déclaration de prétraitement

Nous utilisons MySQLI :: STMT_INIT pour initialiser un objet d'instruction de prétraitement:

 $stmt = $mysqli->stmt_init();

Étape 3: Créez une déclaration de requête floue

Ensuite, utilisez comme pour la requête floue. Nous utilisons ? Au lieu de paramètres pour éviter les problèmes d'injection SQL:

 $sql = "SELECT * FROM users WHERE username LIKE ?";

Étape 4: lier les paramètres

Nous devons lier les mots clés de recherche entrés par l'utilisateur à l'utilisateur ? Dans l'instruction SQL et ajouter % à la requête similaire pour indiquer une correspondance floue:

 $searchKeyword = "%$keyword%";  // Mots-clés entrés par l'utilisateur,Ajouter un panneau de pourcentage avant et après
$stmt->prepare($sql);
$stmt->bind_param("s", $searchKeyword);  // "s" Paramètres qui représentent la liaison d'un type de chaîne

Étape 5: Exécutez la requête

Exécutez la requête et obtenez le résultat:

 $stmt->execute();
$result = $stmt->get_result();

Étape 6: traiter les résultats

Obtenez le résultat de la requête et traitez-le via get_result () , par exemple, la sortie du résultat au navigateur:

 while ($row = $result->fetch_assoc()) {
    echo "User ID: " . $row['id'] . " - Username: " . $row['username'] . "<br>";
}

Étape 7: Fermez la connexion

Une fois la requête terminée, n'oubliez pas de fermer la connexion de la base de données:

 $stmt->close();
$mysqli->close();

4. Résumé

En utilisant MySQLI :: STMT_INIT et les instructions de prétraitement, nous pouvons effectivement prévenir l'injection SQL et améliorer les performances de la requête. Surtout lorsque vous utilisez des requêtes Fuzzy, les instructions de prétraitement peuvent nous aider à séparer la requête des données saisies par l'utilisateur, augmentant la sécurité et l'efficacité.

En outre, il convient de noter que si les requêtes sont très utiles dans certains scénarios, les requêtes floues peuvent entraîner des problèmes de performances lorsqu'ils traitent de grandes quantités de données. Il est possible d'envisager d'améliorer davantage l'efficacité des requêtes grâce à l'indexation de la base de données ou à d'autres mesures d'optimisation.