Normes strictes : résolution de l'erreur mysqli_next_result() avec mysqli_multi_query
Assurer une utilisation appropriée de mysqli_multi_query est crucial pour éviter de rencontrer le message « Normes strictes ». Bien que l'élimination des points-virgules ait pu éliminer un problème, cela n'a pas résolu le problème principal.
Pour répondre au message d'erreur, tenez compte des suggestions suivantes :
Comprendre mysqli_next_result()
mysqli_next_result() avance le pointeur de résultat vers le prochain jeu de résultats généré par mysqli_multi_query(). Cependant, son exécution nécessite un jeu de résultats initial, qui n'est pas garanti dans tous les cas.
Solution
Incorporez les vérifications suivantes dans la boucle 'do' :
do { if ($result = mysqli_store_result($db)) { // ensemble de résultats du processus } } while (mysqli_more_results($db) && mysqli_next_result($db));
Syntaxe alternative : WHILE{} Boucle
Tandis que le classique "IF(){DO{} La syntaxe WHILE}" est valide, une alternative simplifiée et plus lisible est :
while((isset($multi_query) && (next($queries) && mysqli_more_results($mysqli) && mysqli_next_result($mysqli))) || (!isset($multi_query) && $multi_query = mysqli_multi_query($mysqli, imploser(';', $queries))))
Cette approche définit clairement les conditions d'exécution de la boucle et de vérification des ensembles de résultats.
Extraits complets
Pour un solution complète, considérez les extraits suivants pour gérer les requêtes avec ou sans jeux de résultats :
Classique "IF(){DO{} WHILE}" Syntaxe :
if (mysqli_multi_query($mysqli, implode(';', $queries))) { do { echo "<br><br>", key($queries), ": ", current($queries); // display key:value @ pointer if ($result = mysqli_store_result($mysqli)) { // if a result set 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 } while (next($queries) && mysqli_more_results($mysqli) && mysqli_next_result($mysqli)); } if ($mysqli_error = mysqli_error($mysqli)) { echo "<br><br>", key($queries), ": ", current($queries), "Syntax Error:<br>$mysqli_error"; // display array pointer key:value }
Roue réinventée "WHILE{}" Syntaxe :
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 } if ($mysqli_error = mysqli_error($mysqli)) { echo "<br><br>", key($queries), ": ", current($queries), "Syntax Error:<br>$mysqli_error"; // display array pointer key:value }
Ces les extraits gèrent efficacement les requêtes avec ou sans jeux de résultats et fournissent une gestion détaillée des erreurs à des fins de débogage.
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!