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.
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.
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:
Créer une connexion de base de données
Utilisez mysqli_multi_query () pour effectuer une requête multi-statement
Utilisez Store_Result () pour obtenir l'ensemble de résultats actuel
Utilisez Next_Result () pour passer à l'ensemble de résultats suivant
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'il y a plus d'ensembles de résultats
if ($mysqli->more_results()) {
echo "<hr>Ensemble de résultats suivants:<br>";
}
} while ($mysqli->next_result());
} else {
echo "L'exécution de la requête a échoué: " . $mysqli->error;
}
$mysqli->close();
?>
Assurez-vous que les instructions SQL sont séparées par des demi-colons : cela est nécessaire pour Multi_Query () .
Chaque ensemble de résultats doit être extrait à l'aide de Store_Result () et les ressources doivent être publiées à temps .
Next_result () ne renvoie pas de données, sa fonction consiste à permettre à Store_Result () d'extraire le jeu de résultats suivant .
Pendant le débogage, vous pouvez imprimer MySqli-> Erreur pour afficher les informations d'erreur .
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
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.