Dans PHP, l'extension MySQLI fournit plusieurs façons d'interagir avec une base de données. Parmi eux, la fonction MySQLI :: STMT_INIT est un outil très utile qui peut être utilisé pour initialiser une instruction préparée. Avec cette fonction, vous pouvez exécuter des procédures stockées plus en toute sécurité et efficacement et traiter les résultats renvoyés. Cet article expliquera en détail comment utiliser MySQLI :: STMT_INIT pour exécuter les procédures stockées et les résultats de processus.
Tout d'abord, assurez-vous que votre base de données a créé des procédures stockées. Supposons que nous ayons une procédure stockée appelée get_user_info qui renvoie le nom et l'e-mail de l'utilisateur en fonction de l'ID de l'utilisateur. Le code SQL pour les procédures stockés est le suivant:
DELIMITER $$
CREATE PROCEDURE get_user_info(IN user_id INT)
BEGIN
SELECT name, email FROM users WHERE id = user_id;
END$$
DELIMITER ;
Dans PHP, nous utiliserons MySQLI :: STMT_INIT pour initialiser un objet d'instruction et exécuter les procédures stockées via cet objet.
Tout d'abord, vous devez vous connecter à la base de données à l'aide de l'extension MySQLI :
<?php
$host = 'localhost';
$username = 'root';
$password = '';
$database = 'test_db';
$mysqli = new mysqli($host, $username, $password, $database);
if ($mysqli->connect_error) {
die('Échec de la connexion: ' . $mysqli->connect_error);
}
?>
La fonction mysqli :: stmt_init est utilisée pour initialiser un objet mysqli_stmt . Dans cet exemple, nous initialiserons un objet d'instruction pour exécuter la procédure stockée GET_USER_INFO .
<?php
// Initialiser l'objet de l'instruction
$stmt = $mysqli->stmt_init();
// Vérifiez si l'initialisation est réussie
if (!$stmt) {
die('Impossible d'initialiser les déclarations: ' . $mysqli->error);
}
?>
Une fois l'objet d'instruction initialisé, nous pouvons utiliser la méthode de préparation pour préparer l'instruction SQL de la procédure stockée. Lors de l'exécution de la procédure stockée, nous passerons les paramètres (dans cet exemple l'ID utilisateur):
<?php
// Préparer la procédure stockée
$query = "CALL get_user_info(?)";
if (!$stmt->prepare($query)) {
die('La préparation de la procédure stockée a échoué: ' . $stmt->error);
}
// Lier les paramètres
$user_id = 1; // Supposons que nous voulons interroger l'utilisateur ID pour 1 Information
$stmt->bind_param("i", $user_id); // "i" exprimer integer taper
// Exécuter les procédures stockées
if (!$stmt->execute()) {
die('La procédure stockée a échoué: ' . $stmt->error);
}
?>
Une fois la procédure stockée exécutée, l'ensemble de résultats est généralement renvoyé. Ici, nous devons obtenir le résultat d'exécution via la méthode get_result et le traiter.
<?php
// Obtenez les résultats de la requête
$result = $stmt->get_result();
if ($result->num_rows > 0) {
// Sortir chaque ligne de données
while ($row = $result->fetch_assoc()) {
echo "Nom: " . $row['name'] . "<br>";
echo "e-mail: " . $row['email'] . "<br>";
}
} else {
echo "Aucun enregistrement pertinent n'a été trouvé";
}
?>
Enfin, n'oubliez pas de fermer la connexion de l'objet et de la base de données de l'instruction:
<?php
$stmt->close();
$mysqli->close();
?>
Dans un environnement de production, il est important d'assurer une gestion des erreurs appropriée. Vous pouvez assister à l'erreur en vérifiant les valeurs de retour des méthodes de préparation , d'exécution et de get_result . De plus, vous pouvez également utiliser l'instruction TRY-Catch pour assister à des exceptions pour vous assurer que le programme peut sortir gracieusement lorsqu'une erreur se produit.
Grâce à la fonction MySQLI :: STMT_INIT , vous pouvez exécuter des procédures stockées en toute sécurité et efficacement, et obtenir des fonctions via la liaison des paramètres et les ensembles de résultats pour traiter flexiblement les données renvoyées. L'utilisation de déclarations préparées empêche non seulement l'injection de SQL, mais améliore également l'efficacité de l'exécution. J'espère que cet article peut vous aider à mieux comprendre et utiliser les extensions MySqli pour faire fonctionner les procédures stockées.