logo oujood
🔍

La fonction next_result() / mysqli_next_result() en PHP : comment accéder aux résultats de requêtes multi-query

La fonction next_result() / mysqli_next_result() est une fonction simple et efficace pour accéder aux jeux de résultats successifs. Elle est indispensable pour traiter les résultats de requêtes multi-query.

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.