Position actuelle: Accueil> Derniers articles> Comment parcourir plusieurs ensembles de résultats et extraire des données à l'aide de la fonction Next_Result () dans PHP?

Comment parcourir plusieurs ensembles de résultats et extraire des données à l'aide de la fonction Next_Result () dans PHP?

gitbox 2025-05-02

Lorsque vous utilisez PHP et MySQLI pour les opérations de base de données, nous exécutons généralement une seule requête à la fois. Cependant, dans certains scénarios commerciaux complexes, plusieurs instructions de requête peuvent devoir être exécutées via une demande, et à ce moment, plusieurs ensembles de résultats doivent être traités. L'extension MySQLI de PHP fournit la fonction Next_Result () pour nous aider à parcourir ces ensembles de résultats.

1. Pourquoi y a-t-il plusieurs ensembles de résultats?

Plusieurs ensembles de résultats se produisent généralement lorsque des requêtes SQL contenant plusieurs instructions sont exécutées, par exemple:

 SELECT * FROM users; SELECT * FROM orders;

Ceci est courant lorsque SQL est exécuté dans des procédures stockées (procédures stockées) ou en lots. MySqli_Multi_Query () en PHP prend en charge cette forme d'exécution par lots.

2. Processus de base

Les étapes de base pour l'utilisation de mysqli_multi_query () et de next_result () pour traiter plusieurs ensembles de résultats en PHP sont les suivants:

  1. Créer une connexion de base de données

  2. Utilisez mysqli_multi_query () pour effectuer une requête multi-statement

  3. Utilisez Store_Result () pour obtenir l'ensemble de résultats actuel

  4. Utilisez Next_Result () pour passer à l'ensemble de résultats suivant

3. Exemple de code complet

Voici un exemple concret montrant comment itérer dans plusieurs ensembles de résultats et extraire les données:

 <?php
$mysqli = new mysqli("localhost", "username", "password", "database");

if ($mysqli->connect_errno) {
    die("Échec de la connexion: " . $mysqli->connect_error);
}

$sql = "SELECT id, username FROM users; SELECT id, order_date FROM orders;";
if ($mysqli->multi_query($sql)) {
    do {
        if ($result = $mysqli->store_result()) {
            while ($row = $result->fetch_assoc()) {
                echo "<pre>";
                print_r($row);
                echo "</pre>";
            }
            $result->free();
        }

        // Vérifiez s&#39;il y a plus d&#39;ensembles de résultats
        if ($mysqli->more_results()) {
            echo "<hr>Ensemble de résultats suivants:<br>";
        }
    } while ($mysqli->next_result());
} else {
    echo "L&#39;exécution de la requête a échoué: " . $mysqli->error;
}

$mysqli->close();
?>

4. Choses à noter

  1. Assurez-vous que les instructions SQL sont séparées par des demi-colons : cela est nécessaire pour Multi_Query () .

  2. Chaque ensemble de résultats doit être extrait à l'aide de Store_Result () et les ressources doivent être publiées à temps .

  3. Next_result () ne renvoie pas de données, sa fonction consiste à permettre à Store_Result () d'extraire le jeu de résultats suivant .

  4. Pendant le débogage, vous pouvez imprimer MySqli-> Erreur pour afficher les informations d'erreur .

5. Scénarios d'application pratiques

  • Lisez les données de plusieurs tables en lots et affichez-les sur la même page

  • Appelez des procédures stockées qui renvoient plusieurs ensembles de résultats

  • Lorsque vous effectuez des requêtes SQL d'analyse statistique complexe

6. Recommandations de sécurité

Lors de l'exécution de requêtes à plusieurs stades, assurez-vous de faire attention aux risques d'injection SQL. L'utilisation de méthodes de préparation et bind_param est une approche plus sûre, bien que Multi_Query () ne prenne pas en charge la préparation , elle peut diviser la logique en plusieurs requêtes uniques pour éviter les risques.