Lorsque vous utilisez PHP pour les opérations de base de données, en particulier lors de l'exécution de plusieurs requêtes SQL, la méthode Next_Result () est souvent requise. Le but de next_result () est de basculer l'objet à l'ensemble de résultats de la question suivante. Mais le problème est:
next_result () renvoie une valeur booléenne:
Return True : indique que le jeu de résultats suivant est passé avec succès à l'ensemble de résultats suivant, ou le jeu de résultats suivant est vide (par exemple, les instructions de mise à jour qui ne renvoient pas les lignes).
Retour false : signifie qu'il n'y a plus de jeux de résultats, ou une erreur s'est produite pendant le processus de commutation.
Par conséquent, le moyen le plus direct de juger est de vérifier la valeur de retour de next_result () .
Jetons un coup d'œil à un exemple simple:
<?php
$mysqli = new mysqli("localhost", "user", "password", "database");
// Effectuer plusieurs requêtes
$sql = "SELECT * FROM users; SELECT * FROM orders;";
if ($mysqli->multi_query($sql)) {
do {
if ($result = $mysqli->store_result()) {
// Traiter l'ensemble de résultats actuel
while ($row = $result->fetch_assoc()) {
echo "Lignes de données:" . json_encode($row) . "<br>";
}
$result->free();
} else {
// L'énoncé actuel n'est pas SELECT Interroger comme,peut être UPDATE、INSERT attendez
if ($mysqli->errno) {
echo "L'ensemble de l'échec des résultats a échoué,erreur:" . $mysqli->error . "<br>";
}
}
// Essayez de passer à l'ensemble de résultats suivant
if ($mysqli->more_results()) {
if (!$mysqli->next_result()) {
echo "Le passage à l'échec de l'échec des résultats suivants,erreur:" . $mysqli->error . "<br>";
break;
}
} else {
// Plus d'ensembles de résultats
break;
}
} while (true);
} else {
echo "Effectuer plusieurs requêtes失败,erreur:" . $mysqli->error;
}
$mysqli->close();
?>
Afin d'éviter de manquer la détection d'erreurs, il est recommandé de vérifier si $ mysqli-> errno est 0 immédiatement après l'appel next_result () . Si ce n'est pas 0, cela signifie que bien que next_result () renvoie true , une erreur s'est produite pendant le processus, comme une erreur de syntaxe.
Une version plus rigoureuse peut être écrite comme ceci:
if ($mysqli->more_results()) {
if (!$mysqli->next_result()) {
// 发生了切换erreur
error_log("Échec du jeu de résultats de changement:" . $mysqli->error);
break;
} elseif ($mysqli->errno) {
// next_result() retour true,但实际出现了erreur
error_log("Une exception s'est produite lors des ensembles de résultats de commutation:" . $mysqli->error);
break;
}
}
Pour déterminer si Next_Result () réussit, il devrait être:
Vérifiez si la valeur de retour de next_result () est vraie .
Vérifiez si $ mysqli-> errno est 0.
Utilisez More_Results () au bon moment pour déterminer s'il est nécessaire d'appeler Next_Result () .
Bien que plusieurs requêtes soient très puissantes, vous devez être prudent lors de la gestion des erreurs, sinon les bogues cachés sont enclins à se produire.
Si vous souhaitez en savoir plus sur les détails de Multi_Query () et Next_Result () , vous pouvez vous référer à la documentation officielle (exemple URL, le nom de domaine a été remplacé par Gitbox.net ).