Lors de l'exécution de instructions multi-Quey à l'aide de MySQLI, nous devons parfois traiter chaque résultat de résultats à son tour. PHP fournit deux fonctions: mysqli_more_results () et mysqli_next_result () , nous permettant de traverser ces résultats gracieusement.
Cet article utilisera un exemple de code réel pour décrire comment utiliser mysqli_more_results () pour déterminer s'il y a un ensemble de résultats suivant, afin d'éviter l'appel incorrect vers mysqli_next_result () .
Supposons que vous ayez un ensemble d'instructions SQL, par exemple:
SELECT * FROM users;
SELECT * FROM orders;
SELECT * FROM products;
Vous souhaitez les exécuter immédiatement et traiter les résultats de chaque requête un par un. Cette situation convient à la gestion de l'affichage des données par lots de backend, de l'initialisation des données et d'autres fins.
Nous devons d'abord nous connecter à la base de données et exécuter plusieurs instructions SQL à l'aide de Multi_Query :
$mysqli = new mysqli("localhost", "username", "password", "database");
if ($mysqli->connect_errno) {
die("Échec de la connexion: " . $mysqli->connect_error);
}
$sql = "
SELECT * FROM users;
SELECT * FROM orders;
SELECT * FROM products;
";
if ($mysqli->multi_query($sql)) {
do {
// Traiter l'ensemble de résultats actuel
if ($result = $mysqli->store_result()) {
while ($row = $result->fetch_assoc()) {
print_r($row);
}
$result->free();
}
// Vérifiez s'il y a un autre ensemble de résultats
if ($mysqli->more_results()) {
echo "Il y a plus de jeux de résultats,Prêt à continuer le traitement...\n";
} else {
echo "Tous les résultats ont été traités。\n";
}
} while ($mysqli->more_results() && $mysqli->next_result());
} else {
echo "L'exécution a échoué: " . $mysqli->error;
}
$mysqli->close();
Dans cet exemple, nous utilisons les fonctions clés suivantes:
mysqli :: multi_query ($ query)
Envoyez des requêtes contenant plusieurs instructions SQL à la base de données.
mysqli :: store_result ()
Obtenez l'ensemble de résultats actuel.
mysqli :: More_results ()
Vérifiez s'il y a toujours un ensemble de résultats restants.
mysqli :: next_result ()
Passez à l'ensemble de résultats suivant afin que nous puissions continuer à traiter.
Grâce à la boucle DO ... en combinant mysqli_more_results () et mysqli_next_result () , nous pouvons traiter en toute sécurité tous les ensembles de résultats pour éviter un comportement ou des erreurs non défini lors de l'appel de next_result () incorrectement.
Certains développeurs peuvent utiliser mysqli_next_result () directement dans la boucle sans vérifier s'il y a plus de résultats, ce qui peut conduire à l'erreur suivante:
// Mauvaise utilisation:Non vérifié more_results() Juste appeler next_result()
while ($mysqli->next_result()) {
// Ensembles de résultats de traitement
}
Cela peut lancer un avertissement ou une erreur sans résultats ultérieurs. Par conséquent, nous devons toujours vérifier avec More_Results () avant d'appeler Next_Result () .
mysqli_more_results () est un outil important pour déterminer s'il y a plus d'ensembles de résultats après avoir utilisé Multi_Query () . L'utiliser avec mysqli_next_result () peut assurer la robustesse de la logique du programme et éviter les erreurs causées par l'accès hors limites à l'ensemble de résultats.
Dans les projets réels, tels que la création d'un système de rapport ou une logique par lots de données de fond, la maîtrise de cette technique peut rendre vos programmes PHP plus fiables et maintenables.
Pour plus d'informations, veuillez visiter notre documentation de développement: https://gitbox.net/docs