OUJOOD.COM
Définition et utilisation la fonction next_result() / mysqli_next_result() en PHP
PHP Version: 5+
La fonction next_result() / mysqli_next_result() permet de préparer le prochain jeu de résultats d'une requête multi-query. Elle est utilisée en combinaison avec la fonction mysqli_multi_query(), qui permet d'exécuter plusieurs requêtes SQL en une seule fois.
La fonction next_result() / mysqli_next_result() prend en paramètre un objet mysqli ou un identifiant de connexion mysqli. Elle retourne true en cas de succès ou false en cas d'échec.
Syntaxe orientée objet
$result->next_result();
Syntaxe procédurale
mysqli_next_result($mysql);
Valeurs possibles et paramètres
La fonction next_result()/mysqli_next_result() retourne true en cas de succès ou false en cas d'échec.
Exemples
Exemple orienté objet
Exemple : 📋 Copier le code
<?php $db = new mysqli('localhost', 'utilisateur', 'motDePasse', 'my_database'); // Exécution d'une requête multi-query $result = $db->multi_query(" SELECT * FROM users; SELECT * FROM posts; "); // Boucle sur les jeux de résultats while ($db->next_result()) { // Récupération du jeu de résultats actuel $result = $db->store_result(); // Traitement du jeu de résultats while ($row = $result->fetch_assoc()) { echo $row['name'] . ' ' . $row['email']; } // Libération de la mémoire utilisée par le jeu de résultats $result->free_result(); } // Fermeture de la connexion à la base de données $db->close(); ?>
Exemple procédural
Exemple : 📋 Copier le code
<?php $mysql = mysqli_connect('localhost', 'utilisateur', 'motDePasse', 'my_database'); // Exécution d'une requête multi-query $result = mysqli_multi_query($mysql, " SELECT * FROM users; SELECT * FROM posts; "); // Boucle sur les jeux de résultats while (mysqli_next_result($mysql)) { // Récupération du jeu de résultats actuel $result = mysqli_store_result($mysql); // Traitement du jeu de résultats while ($row = mysqli_fetch_assoc($result)) { echo $row['name'] . ' ' . $row['email']; } // Libération de la mémoire utilisée par le jeu de résultats mysqli_free_result($result); } // Fermeture de la connexion à la base de données mysqli_close($mysql); ?>
Cas d'utilisation pratique de la fonction next_result() / mysqli_next_result() en PHP
Cas d'utilisation 1 : Exécution de plusieurs requêtes et récupération des résultats
Dans ce cas, nous allons exécuter plusieurs requêtes SQL en une seule fois à l'aide de mysqli_multi_query() et utiliser next_result() / mysqli_next_result() pour accéder à chaque jeu de résultats.
Approche Orientée Objet :
Exemple : 📋 Copier le code
<?php $db = new mysqli('localhost', utilisateur, 'motDePasse', 'my_database'); // Exécution d'une requête multi-query $result = $db->multi_query(" SELECT * FROM users; SELECT * FROM posts; "); // Boucle sur les jeux de résultats while ($db->next_result()) { // Récupération du jeu de résultats actuel $result = $db->store_result(); // Traitement du jeu de résultats while ($row = $result->fetch_assoc()) { echo $row['name'] . ' ' . $row['email'] . '<br>'; } // Libération de la mémoire utilisée par le jeu de résultats $result->free_result(); } // Fermeture de la connexion à la base de données $db->close(); ?>
Approche Procédurale :
Exemple : 📋 Copier le code
<?php $mysql = mysqli_connect('localhost', utilisateur, 'motDePasse', 'my_database'); // Exécution d'une requête multi-query $result = mysqli_multi_query($mysql, " SELECT * FROM users; SELECT * FROM posts; "); // Boucle sur les jeux de résultats while (mysqli_next_result($mysql)) { // Récupération du jeu de résultats actuel $result = mysqli_store_result($mysql); // Traitement du jeu de résultats while ($row = mysqli_fetch_assoc($result)) { echo $row['name'] . ' ' . $row['email'] . '<br>'; } // Libération de la mémoire utilisée par le jeu de résultats mysqli_free_result($result); } // Fermeture de la connexion à la base de données mysqli_close($mysql); ?>
Cas d'utilisation 2 : Appel à une procédure stockée
Dans ce cas, nous allons appeler une procédure stockée à l'aide de mysqli_multi_query() et utiliser next_result() / mysqli_next_result() pour accéder aux résultats de la procédure.
Approche Orientée Objet :
Exemple : 📋 Copier le code
<?php $db = new mysqli('localhost', utilisateur, 'motDePasse', 'my_database'); // Appel d'une procédure stockée $result = $db->multi_query("CALL MaProcedure();"); // Boucle sur les jeux de résultats while ($db->next_result()) { // Récupération du jeu de résultats actuel $result = $db->store_result(); // Traitement du jeu de résultats while ($row = $result->fetch_assoc()) { echo $row['colonne1'] . ' ' . $row['colonne2'] . '<br>'; } // Libération de la mémoire utilisée par le jeu de résultats $result->free_result(); } // Fermeture de la connexion à la base de données $db->close(); ?>
Approche Procédurale :
Exemple : 📋 Copier le code
<?php $mysql = mysqli_connect('localhost', utilisateur, 'motDePasse', 'my_database'); // Appel d'une procédure stockée $result = mysqli_multi_query($mysql, "CALL MaProcedure();"); // Boucle sur les jeux de résultats while (mysqli_next_result($mysql)) { // Récupération du jeu de résultats actuel $result = mysqli_store_result($mysql); // Traitement du jeu de résultats while ($row = mysqli_fetch_assoc($result)) { echo $row['colonne1'] . ' ' . $row['colonne2'] . '<br>'; } // Libération de la mémoire utilisée par le jeu de résultats mysqli_free_result($result); } // Fermeture de la connexion à la base de données mysqli_close($mysql); ?>
Ces exemples illustrent comment utiliser next_result() / mysqli_next_result() dans différentes situations, que ce soit pour exécuter des requêtes multiples ou pour appeler des procédures stockées. Vous pouvez adapter ces exemples en fonction de vos besoins spécifiques.
Astuces et conseils
- Il est important de vérifier la valeur de retour de la fonction next_result() / mysqli_next_result() avant de continuer. En cas d'échec, une erreur aura été générée et il faudra la traiter.
- Il est également important de libérer la mémoire utilisée par les jeux de résultats inutilisés. Pour ce faire, on peut utiliser la fonction mysqli_free_result().
Conclusion
La fonction next_result() / mysqli_next_result() est un outil indispensable pour traiter les résultats de requêtes multi-query. Elle permet d'accéder aux jeux de résultats successifs de manière simple et efficace.