Position actuelle: Accueil> Derniers articles> Pourquoi $ errno est-il toujours 0, mais la requête ne réussit pas?

Pourquoi $ errno est-il toujours 0, mais la requête ne réussit pas?

M66 2025-05-30

L'extension MySQL est un choix courant lors de l'utilisation de PHP et MySQL pour les opérations de base de données. Pour les erreurs dans les requêtes de base de données de débogage, mysqli :: $ errno et mysqli :: $ error sont des outils très utiles. Ils peuvent aider les développeurs à obtenir des codes d'erreur de base de données et des informations d'erreur. Cependant, parfois les développeurs peuvent rencontrer cette situation: mysqli :: $ errno renvoie 0, mais l'opération de requête échoue toujours. Alors, pourquoi cela se produit-il? Discutons-en en profondeur ci-dessous.

1. Le rôle de mysqli :: $ errno

La propriété MySQLI :: $ ERRNO contient le code d'erreur qui s'est produit dans la dernière opération MySQL. En règle générale, 0 signifie qu'aucune erreur ne s'est produite, tandis qu'une valeur non nulle indique qu'une erreur s'est produite. Il s'agit du code d'erreur dans le système de base de données MySQL. Avec MySqli :: $ Erreur , cela peut nous aider à localiser rapidement le problème.

2. Le cas où mysqli :: $ errno renvoie 0

Malgré l'échec de la requête, MySqli :: $ Errno renvoie toujours 0 , ce qui peut être dû à plusieurs raisons:

2.1 La requête SQL elle-même ne génère pas d'erreur MySQL

MySQLI :: $ Errno ne renvoiera que le code d'erreur sur le serveur MySQL. Si votre requête ne déclenche pas une erreur MySQL (telle que les erreurs de syntaxe, les problèmes de connexion, etc.), alors mysqli :: $ errno peut toujours être 0 . À l'heure actuelle, il convient de noter que même si la requête renvoie un résultat vide, cela ne signifie pas qu'une erreur s'est produite lors de l'exécution de MySQL.

Par exemple, lorsque la requête ne correspond à aucun résultat, MySQL ne renvoie pas d'erreur, mais renvoie simplement un jeu de résultats vide. À l'heure actuelle , MySqli :: $ Errno est toujours 0 , et la requête elle-même n'échoue pas.

2.2 La requête SQL de type non error est utilisée

Certaines requêtes SQL (telles que l'insertion , la mise à jour ou la suppression ) peuvent être exécutées avec succès, mais le nombre de lignes affectées est 0 , c'est-à-dire que les données de la base de données ne sont pas réellement modifiées. Bien que ce ne soit pas une erreur, le développeur peut penser que la requête ne réussit pas, entraînant des malentendus. Afin de mieux déterminer si cela réussit, vous pouvez vérifier MySqli_Affected_Rows () pour confirmer si des lignes sont affectées.

2.3 Problèmes de connexion de la base de données

Parfois, la connexion de la base de données peut avoir expiré ou déconnecté avant l'interrogation, et MySqli :: $ Errno ne renvoie pas immédiatement une erreur. Vous pouvez vérifier Mysqli :: $ connect_errno pour confirmer si la connexion de la base de données est normale.

3. Comment déboguer ce problème?

Lorsque vous constatez que mysqli :: $ errno renvoie toujours 0 mais la requête échoue toujours, vous pouvez prendre la méthode suivante pour déboguer:

3.1 Utilisez MySqli :: $ Erreur pour obtenir plus d'informations

La propriété MySQLI :: $ Erreur contient des informations d'erreur MySQL liées à l'opération actuelle. Même si mysqli :: $ errno renvoie 0 , vous pouvez toujours obtenir des indices via MySQLI :: $ Erreur . Même si Errno est 0 , l'erreur peut donner quelques conseils supplémentaires.

 if ($mysqli->errno) {
    echo "Error number: " . $mysqli->errno . "<br>";
    echo "Error message: " . $mysqli->error . "<br>";
}

3.2 Vérifiez les instructions SQL

Assurez-vous que votre requête SQL n'a pas d'erreurs de syntaxe ou de logique. Vous pouvez imprimer la requête et l'exécuter directement dans un outil de gestion de la base de données telle que PhpMyAdmin pour voir si le résultat attendu est renvoyé.

3.3 Vérifiez le nombre de lignes affectées

Pour les requêtes d'insertion , de mise à jour ou de suppression , les résultats renvoyés par la fonction MySQLI_AFFected_Rows () doivent être vérifiés après l'exécution. Si 0 est renvoyé, cela signifie que bien que la requête ait été exécutée, aucune donnée n'a été modifiée.

 $affected_rows = $mysqli->affected_rows;
if ($affected_rows === 0) {
    echo "No rows were affected by the query.<br>";
}

3.4 Vérifier les connexions de la base de données

Si vous pensez qu'il s'agit d'un problème de connexion de la base de données, vous pouvez utiliser MySQLI_Connect_errno () pour vérifier si la connexion de la base de données est réussie.

 if ($mysqli->connect_errno) {
    echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}

4. Résumé

Lorsque vous utilisez MySQLI :: $ Errno , s'il renvoie 0 , mais la requête échoue toujours, il se peut que la requête ne génère pas d'erreur MySQL, la requête ne modifie aucune donnée ou qu'il existe un autre type de problème plutôt qu'une erreur MySQL. Pour résoudre ce problème, les développeurs doivent combiner des outils tels que MySQLI :: $ Error , mysqli_affected_rows () pour effectuer un débogage complet. Grâce à ces étapes, vous pouvez identifier et résoudre plus efficacement les problèmes dans les requêtes de base de données.

 // Connectez-vous à la base de données
$mysqli = new mysqli("localhost", "username", "password", "database");

// Requête
$query = "SELECT * FROM some_table WHERE id = 1";
$result = $mysqli->query($query);

// Traitement des résultats
if ($mysqli->errno) {
    echo "Error number: " . $mysqli->errno . "<br>";
    echo "Error message: " . $mysqli->error . "<br>";
}

// Fermer la connexion
$mysqli->close();