<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// Cet article est à des fins de démonstration uniquement,Le code suivant n'a rien à voir avec le texte。</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">mysqli</span></span><span>(</span><span><span class="hljs-string">"localhost"</span></span><span>, </span><span><span class="hljs-string">"user"</span></span><span>, </span><span><span class="hljs-string">"password"</span></span><span>, </span><span><span class="hljs-string">"test"</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$mysqli</span></span><span>->connect_errno) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Échec de la connexion: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>->connect_error;
</span><span><span class="hljs-keyword">exit</span></span><span>();
}
</span><span><span class="hljs-meta">?></span></span><span>
<hr>
<h1>éviter“Déclaration de prétraitement non valide”erreur:mysqli_stmt::</span><span><span class="hljs-variable constant_">next_result</span></span><span> Pièges et solutions courantes lors de l'utilisation</h1>
<p>
Utilisé PHP de <code>mysqliOu astuce similaire: déclaration préparée non valide . La plupart de ces problèmes sont liés à une mauvaise utilisation de mysqli_stmt :: next_result () .
Lorsqu'une procédure ou une requête stockée avec plusieurs SQL est exécutée, MySQL renvoie plusieurs ensembles de résultats. L'objet de l'instruction de prétraitement MySQLI_STMT ne peut traiter qu'un seul ensemble de résultats par défaut. Si l'ensemble de résultats précédent n'est pas complètement consommé (par exemple, le stmt-> fetch () n'est pas appelé pour le lire proprement), alors continuant à appeler next_result () peut entraîner une erreur de prétraitement "non valide".
Il existe deux solutions principales: assurer une consommation complète de l'ensemble de résultats et assurer la libération des ressources.
$stmt = $mysqli->prepare("CALL my_stored_procedure()");
$stmt->execute();
do {
$result = $stmt->get_result();
if ($result) {
while ($row = $result->fetch_assoc()) {
// Résultats de traitement
}
$result->free();
}
} while ($stmt->more_results() && $stmt->next_result());
Dans le code ci-dessus, le DO ... tandis que la boucle garantit que chaque ensemble de résultats est traversé et libéré avant d'entrer dans le jeu de résultats suivant. C'est la clé pour éviter les erreurs.
L'erreur de «déclaration de prétraitement non valide» est essentiellement causée par une mauvaise gestion de l'ensemble de résultats. Comprendre le mécanisme de travail de mysqli_stmt :: next_result et traiter explicitement avec tous les ensembles de résultats dans le code est la solution fondamentale pour éviter de telles erreurs. Après avoir maîtrisé ces compétences, il peut non seulement améliorer la stabilité des applications, mais également réduire les bogues cachés dans les interactions de base de données.
Étiquettes associées:
mysqli_stmt