Maison >développement back-end >tutoriel php >Comment corriger les « Normes strictes : erreur mysqli_next_result() » avec mysqli_multi_query() ?

Comment corriger les « Normes strictes : erreur mysqli_next_result() » avec mysqli_multi_query() ?

DDD
DDDoriginal
2024-11-29 05:39:171064parcourir

How to Fix

Normes strictes : erreur mysqli_next_result() avec mysqli_multi_query

Problème :

Utilisation de mysqli_multi_query( ) déclenche des « normes strictes » erreur liée à mysqli_next_result().

Solution :

Pour résoudre ce problème, utilisez le code suivant :

do{} while(mysqli_more_results($db) && mysqli_next_result($db));

Explication :

L'erreur de normes strictes se produit car mysqli_more_results() doit être appelé pour vérifier si mysqli_next_result() doit être utilisé. L'extrait de code fourni garantit que mysqli_next_result() n'est appelé que s'il existe un autre jeu de résultats.

Considérations :

  • Dans l'exemple fourni, seules les requêtes INSERT sont en cours d'exécution, qui ne renvoient pas de jeux de résultats. Par conséquent, la boucle ne s'exécutera pas et l'erreur ne se produira pas.
  • Si vos requêtes incluent des instructions SELECT ou d'autres opérations qui renvoient des jeux de résultats, la solution fournie empêchera le message d'erreur d'apparaître.
  • L'extrait de code modifié utilise une boucle do-while, qui est post-test et ne nécessite pas de pause ou de sortie conditionnelle dans le boucle.

Améliorations :

Pour une approche plus robuste, considérez l'extrait de code suivant :

if(mysqli_multi_query($db,$querystring)){
    do{
        $cumulative_rows+=mysqli_affected_rows($db);
    } while(mysqli_more_results($db) && mysqli_next_result($db));
}
if($error_mess=mysqli_error($db)){echo "Error: $error_mess";}
echo "Cumulative Affected Rows: $cumulative_rows";

Cet extrait de code :

  • Compte les lignes concernées à partir de INSERT, UPDATE ou DELETE requêtes.
  • Affiche les lignes cumulées affectées.
  • Vérifie les erreurs et fournit un message d'erreur informatif.

Remarques supplémentaires :

Pour les utilisateurs qui ne sont pas familiers avec mysqli_multi_query(), voici un extrait de code polyvalent qui gère les requêtes avec ou sans jeux de résultats :

while((isset($multi_query) && (next($queries) && mysqli_more_results($mysqli) && mysqli_next_result($mysqli))) || (!isset($multi_query) && $multi_query=mysqli_multi_query($mysqli,implode(';',$queries)))){
    echo "<br><br>",key($queries),": ",current($queries);  // display array pointer key:value
    if($result=mysqli_store_result($mysqli)){
        while($rows=mysqli_fetch_assoc($result)){
            echo "<br>Col = {$rows["Col"]}";
        }
        mysqli_free_result($result);
    }
    echo "<br>Rows = ",mysqli_affected_rows($mysqli); // acts like num_rows on SELECTs
}

Cet extrait de code :

  • Fonctionne pour tous les types de requêtes, y compris SELECT, INSERT, UPDATE et DELETE.
  • Fournit un résultat détaillé, comprenant la requête elle-même, les lignes ou colonnes concernées et les erreurs potentielles.
  • Peut être facilement modifié pour besoins spécifiques ou structures de bases de données.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn