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.
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.
$stmt = $mysqli->stmt_init();
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 .
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é.
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);
}
Nous utilisons MySQLI :: STMT_INIT pour initialiser un objet d'instruction de prétraitement:
$stmt = $mysqli->stmt_init();
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 ?";
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
Exécutez la requête et obtenez le résultat:
$stmt->execute();
$result = $stmt->get_result();
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>";
}
Une fois la requête terminée, n'oubliez pas de fermer la connexion de la base de données:
$stmt->close();
$mysqli->close();
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.