Lorsque vous utilisez MySQLI pour les opérations de base de données, nous rencontrons souvent le problème des changements anormaux dans MySqli :: $ Errno . mysqli :: $ errno est un attribut utilisé pour obtenir des codes d'erreur lors de la connexion de la base de données ou de la requête. Il peut généralement aider les développeurs à dépanner les erreurs. Cependant, lorsque nous faisons une requête, nous constatons parfois que la valeur de MySqli :: $ Errno a changé incompatible avec les attentes, entraînant un comportement inattendu dans le programme. Pour le moment, une raison potentielle est souvent négligée - l'ensemble de résultats n'est pas publié.
mysqli :: $ errno est une propriété de l'objet mysqli . Il stocke le code d'erreur généré lors de l'opération MySQL précédente (comme la requête, la connexion, etc.). Si l'opération réussit, MySQLI :: $ Errno reviendra 0 ; Si l'opération échoue, il renverra un code d'erreur non nul. Vous pouvez trouver la cause spécifique de l'erreur MySQL en fonction de ces codes d'erreur.
Les codes d'erreur courants comprennent:
1045: Accès refusé (accès refusé pour l'utilisateur)
1064: Erreur de syntaxe (erreur de syntaxe)
2002: Impossible de se connecter au serveur MySQL (Impossible de se connecter au serveur MySQL)
Habituellement, lorsque l'opération de la base de données échoue, nous pouvons utiliser MySqli :: $ Errno et MySQLI :: $ ERROR (Message d'erreur) pour déterminer le problème.
Lorsque vous utilisez MySQLI pour l'interrogation, la valeur de MySqli :: $ Errno devient parfois sans sens comme prévu, surtout après l'exécution de la requête. Si vous ne publiez pas le résultat des résultats de la requête dans le temps, MySqli :: $ Errno peut devenir un code d'erreur Unreal. En effet, les ressources de connexion de MySQL ne sont pas entièrement libérées, ce qui entraîne des requêtes ultérieures qui peuvent être affectées.
Lorsque nous utilisons des fonctions telles que mysqli_query () pour exécuter une requête, MySQL enregistre les résultats de la requête en mémoire. Afin d'économiser des ressources, une fois la requête terminée, nous devons utiliser la fonction mysqli_free_result () pour libérer explicitement l'ensemble de résultats de requête. Cela aide non seulement la mémoire libre, mais évite également les opérations ultérieures qui peuvent être affectées par des ensembles de résultats inédits.
Supposons que vous exécutiez une requête et une fois la requête terminée, mysqli_free_result () n'est pas appelé pour libérer le jeu de résultats. Ensuite, lorsque vous essayez d'effectuer une autre opération de requête, vous pouvez rencontrer la situation suivante:
<?php
// Connectez-vous à la base de données
$mysqli = new mysqli('localhost', 'root', 'password', 'test_db');
// Exécuter la première requête
$result1 = $mysqli->query("SELECT * FROM users");
// Si aucun ensemble de résultats n'est publié
// $mysqli->free_result($result1); // Ignorer la libération
// Exécuter la deuxième requête
$result2 = $mysqli->query("SELECT * FROM orders");
// Obtenir un message d'erreur
echo "Code d'erreur: " . $mysqli->errno;
?>
Dans le code ci-dessus, puisque nous n'avons pas publié l'ensemble de résultats de la première requête, $ mysqli-> errno peut avoir une exception dans la deuxième requête, ce qui entraîne l'incapacité d'obtenir correctement le code d'erreur, et même un code d'état d'erreur est renvoyé. C'est la cause profonde du changement anormal de MySqli :: $ errno .
Afin d'éviter des changements anormaux dans MySQLI :: $ Errno , nous devons nous assurer que l'ensemble de résultats de requête est publié à temps après que chaque requête a été exécutée. La bonne façon de le faire est:
<?php
// Connectez-vous à la base de données
$mysqli = new mysqli('localhost', 'root', 'password', 'test_db');
// Exécuter la première requête
$result1 = $mysqli->query("SELECT * FROM users");
// Libérez l'ensemble de résultats
if ($result1) {
$result1->free();
}
// Exécuter la deuxième requête
$result2 = $mysqli->query("SELECT * FROM orders");
// Obtenir un message d'erreur
echo "Code d'erreur: " . $mysqli->errno;
?>
En libérant explicitement l'ensemble de résultats, il est possible de s'assurer que les ressources après chaque requête sont nettoyées et éviter d'affecter les opérations ultérieures.
Lorsque vous utilisez MySQLI pour les opérations de base de données, la raison des changements anormaux dans MySqli :: $ Errno est souvent dû à l'oubli de publier l'ensemble de résultats de requête. La libération de l'ensemble de résultats aide non seulement à enregistrer la mémoire, mais garantit également que les opérations ultérieures ne sont pas affectées. Par conséquent, une fois chaque requête terminée, nous devons utiliser mysqli_free_result () ou $ result-> free () à temps pour libérer l'ensemble de résultats de requête, évitant ainsi les erreurs et exceptions inutiles.
Pour vous aider à mieux comprendre les opérations MySQLI et comment éviter les erreurs, vous pouvez vous référer aux ressources suivantes: