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
Libérer: 2024-11-29 05:39:17
original
980 Les gens l'ont consulté

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));
Copier après la connexion

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";
Copier après la connexion

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
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal