Position actuelle: Accueil> Derniers articles> Raisons courantes pour lesquelles la fonction php next_result () renvoie false

Raisons courantes pour lesquelles la fonction php next_result () renvoie false

gitbox 2025-04-29

Lorsque vous utilisez l'extension MySQLI de PHP pour les opérations de base de données, la fonction Next_Result () est souvent utilisée pour traiter les requêtes contenant plusieurs ensembles de résultats (par exemple, des appels multi_query () qui exécutent plusieurs instructions SQL). Cependant, les développeurs constatent parfois que la fonction renvoie false , ce qui peut entraîner des ensembles de résultats ultérieurs non disponibles. Alors, quelles sont les raisons pour lesquelles next_result () renvoie false ? Comment dépanner et le résoudre?

Cet article analysera ce problème en détail.

1. Qu'est-ce que Next_result () ?

MySQLI :: next_result () est une méthode utilisée pour passer à l'ensemble de résultats suivant, utilisé avec Multi_Query () . Habituellement, lors de l'exécution de la requête multi-statement, il est nécessaire de l'utiliser pour obtenir chaque résultat un résultat un par un.

Exemples d'utilisation de base:

 $mysqli = new mysqli("localhost", "user", "password", "database");

$sql = "SELECT * FROM users; SELECT * FROM orders;";
if ($mysqli->multi_query($sql)) {
    do {
        if ($result = $mysqli->store_result()) {
            while ($row = $result->fetch_assoc()) {
                print_r($row);
            }
            $result->free();
        }
    } while ($mysqli->next_result());
} else {
    echo "Query Error: " . $mysqli->error;
}

2. Raisons courantes pour lesquelles next_result () renvoie faux

1. Plus de jeux de résultats

La raison la plus courante est que tous les ensembles de résultats ont été lus . À l'heure actuelle, appeler next_result () reviendra faux , indiquant "plus de résultats".

Solution: Contrôlez simplement les conditions de terminaison du cycle raisonnablement, aucun traitement supplémentaire n'est requis.

2. Une erreur s'est produite dans la requête précédente

Si l'une des multiples instructions SQL exécutées par Multi_Query () échoue, Next_Result () reviendra False et $ mysqli-> Erreur aura des informations d'erreur spécifiques.

Exemple:

 $sql = "SELECT * FROM valid_table; SELECT * FROM invalid_table;";
if ($mysqli->multi_query($sql)) {
    do {
        if ($result = $mysqli->store_result()) {
            // Résultats de traitement
            $result->free();
        } else {
            if ($mysqli->errno) {
                echo "Error: " . $mysqli->error;
                break;
            }
        }
    } while ($mysqli->next_result());
}

3. J'ai oublié de nettoyer l'ensemble de résultats précédent

Si l'ensemble de résultats précédent n'est pas libéré correctement ou n'est pas explicitement extrait via Store_Result () , il peut entraîner des problèmes avec next_result () , en particulier dans les anciennes versions de PHP ou MySQL.

Suggestion: appelez toujours $ result-> gratuit () ou $ mysqli-> store_result () même si vous ne traitez pas le contenu des résultats.

4. Il y a des erreurs de syntaxe ou des déclarations illégales entre les instructions SQL

Multi_Query () prend en charge plusieurs instructions, mais ne prend pas en charge les combinaisons d'instructions de tous types. Par exemple, l'exécution de certaines instructions DDL (telles que la procédure de création ) en mode strict peut être restreinte.

Suggestion: assurez-vous que toutes les instructions sont légales et utilisez $ mysqli-> Erreur pour dépanner si nécessaire.

3. Dépannage et compétences de débogage

  1. Utilisez Error_Reporting (E_ALL) pour activer toutes les invites d'erreur.

  2. Vérifiez $ mysqli-> errno et $ mysqli-> erreur pour les informations d'erreur détaillées.

  3. Logging: écrivez chaque sortie de valeur et de sortie d'erreur Next_Result () dans le journal pour le dépannage facile.

  4. Utilisez mysqli_more_results () pour déterminer s'il existe toujours un ensemble de résultats:

 if ($mysqli->more_results()) {
    $mysqli->next_result();
}

Iv. Un exemple complet

 $mysqli = new mysqli("localhost", "user", "password", "database");

$sql = "SELECT * FROM users; SELECT * FROM orders WHERE order_date > '2024-01-01'";
if ($mysqli->multi_query($sql)) {
    do {
        if ($result = $mysqli->store_result()) {
            while ($row = $result->fetch_assoc()) {
                echo "données: " . implode(", ", $row) . "<br>";
            }
            $result->free();
        } else {
            if ($mysqli->errno) {
                echo "erreur: " . $mysqli->error . "<br>";
            }
        }
    } while ($mysqli->more_results() && $mysqli->next_result());
} else {
    echo "La requête initiale a échoué:" . $mysqli->error;
}

5. Lien de référence