Dans PHP, lors de l'exécution d'instructions SQL à l'aide de l'extension MySQLI, STMT_INIT est une fonction très utile, qui peut initialiser un objet MySQLI_STMT , nous permettant d'exécuter des instructions de prétraitement. Les instructions de prétraitement vous permettent d'utiliser des espaces réservés dans les requêtes de base de données pour empêcher les attaques d'injection SQL.
Parfois, nous devons exécuter la même instruction de prétraitement plusieurs fois, en utilisant simplement différents paramètres à chaque fois que nous exécutons. Dans ce cas, nous pouvons utiliser STMT_INIT pour implémenter plusieurs fois la fonction d'exécution des instructions de prétraitement. Voici un exemple montrant comment utiliser STMT_INIT dans PHP pour exécuter plusieurs instructions SQL:
<?php
// 1. Créer une connexion de base de données
$servername = "localhost";
$username = "root";
$password = "password";
$dbname = "test_database";
// Créer une connexion
$conn = new mysqli($servername, $username, $password, $dbname);
// Vérifiez si la connexion réussit
if ($conn->connect_error) {
die("Échec de la connexion: " . $conn->connect_error);
}
// 2. utiliserstmt_initInitialiser les déclarations de prétraitement
$stmt = $conn->stmt_init();
// Vérifiez si la déclaration de préparation est réussie
if ($stmt->prepare("INSERT INTO users (username, email) VALUES (?, ?)")) {
// 3. Simuler un ensemble de données,Ces données seront insérées plusieurs fois
$users = [
['john_doe', 'john@m66.net'],
['jane_doe', 'jane@m66.net'],
['alice_smith', 'alice@m66.net'],
];
// 4. Exécution en boucle des déclarations de prétraitement,Insérer les données utilisateur une par une
foreach ($users as $user) {
$username = $user[0];
$email = $user[1];
// Lier les paramètres aux déclarations de prétraitement
$stmt->bind_param("ss", $username, $email);
// Instruction d'exécution
if ($stmt->execute()) {
echo "Utilisateur inséré avec succès: $username, $email\n";
} else {
echo "L'insertion a échoué: " . $stmt->error . "\n";
}
}
// 5. Déclaration étroite
$stmt->close();
} else {
echo "La préparation de la déclaration de prétraitement a échoué: " . $conn->error;
}
// 6. Fermez la connexion de la base de données
$conn->close();
?>
Établir une connexion de base de données : Tout d'abord, nous devons nous connecter à la base de données MySQL. Dans cet exemple, LocalHost est utilisé comme serveur, et vous devez ajuster les paramètres de connexion en fonction de la situation réelle.
Instruction d'initialisation : utilisez $ con-> stmt_init () pour initialiser un objet d'instruction prêt pour l'exécution. Ensuite, configurez des instructions SQL prétraitées via la méthode de préparation . Dans cet exemple, nous préparons un insert dans une déclaration qui inserte le nom d'utilisateur et les champs de messagerie dans le tableau des utilisateurs .
Paramètres de liaison : nous lions les variables PHP aux espaces réservés dans les instructions de prétraitement via la méthode bind_param . Le paramètre "SS" signifie que nous sommes liés à deux paramètres de types de chaînes.
Exécution de la boucle : Dans la boucle Foreach , nous passons dans un tableau contenant plusieurs ensembles de données utilisateur. Chaque boucle, exécutez la méthode d'exécution pour insérer une ligne de données.
Énoncé de fermeture et connexion : une fois l'opération terminée, nous fermons le STMT et la connexion de la base de données via la méthode Close () .
Empêcher l'injection SQL : puisque nous utilisons des instructions de prétraitement et la liaison des paramètres, ce processus peut effectivement empêcher les attaques d'injection SQL.
Haute efficacité : pour la même déclaration de requête, différents paramètres sont exécutés par boucle, en évitant la création répétée de nouvelles instructions SQL et en améliorant l'efficacité.
Chaque fois que vous exécutez une boucle, assurez-vous que les méthodes Bind_param et exécuter peuvent traiter correctement différentes données d'entrée.
Si vous devez traiter de grandes quantités de données, assurez-vous que la configuration de la connexion de la base de données peut gérer les demandes simultanées et éviter les goulots d'étranglement de performances.
De cette façon, vous pouvez exécuter efficacement les instructions SQL à l'aide de STMT_INIT en PHP et être en mesure de passer dynamiquement différents paramètres. J'espère que cet exemple vous aidera à mieux comprendre comment exécuter plusieurs instructions de prétraitement dans PHP!