Position actuelle: Accueil> Derniers articles> Savez-vous? MySQLI :: $ Errno ne sera pas réinitialisé automatiquement. Faites attention à ce piège lorsque vous l'utilisez

Savez-vous? MySQLI :: $ Errno ne sera pas réinitialisé automatiquement. Faites attention à ce piège lorsque vous l'utilisez

M66 2025-06-23

Lorsque vous utilisez l'extension MySQLI de PHP, MySQLI :: $ Errno est une propriété très importante qui stocke les codes d'erreur de la dernière opération de base de données. Habituellement, nous l'utiliserons pour déterminer si le fonctionnement de la base de données est réussi ou effectuer un traitement d'erreur. Mais il y a un point remarquable, mysqli :: $ errno , ce qui peut conduire à des erreurs indétectables. Aujourd'hui, discutons de ce problème.

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

mysqli :: $ errno est une propriété de la classe mysqli qui renvoie le code d'erreur de la dernière opération de base de données. S'il n'y a pas d'erreur dans l'opération de base de données, MySQLI :: $ Errno reviendra 0. Au lieu de cela, il renverra un code d'erreur indiquant le type d'erreur spécifique.

Par exemple, lors de l'exécution d'une requête, si la requête réussit, mysqli :: $ errno renvoie 0; Si la requête échoue, le code d'erreur correspondant est renvoyé.

 <?php
$mysqli = new mysqli("localhost", "user", "password", "database");

if ($mysqli->connect_errno) {
    echo "Échec de la connexion: " . $mysqli->connect_error;
    exit();
}

$query = "SELECT * FROM non_existent_table";
$mysqli->query($query);

if ($mysqli->errno) {
    echo "La requête a échoué,Code d&#39;erreur:" . $mysqli->errno;
}
?>

Dans l'exemple ci-dessus, si une erreur se produit lors de l'exécution d'une requête, $ mysqli-> errno renvoie un nombre indiquant l'erreur.

2. Question clé: mysqli :: $ Errno ne sera pas réinitialisé automatiquement

Le problème se produit lorsque MySQLI :: $ Errno n'est pas automatiquement effacé avant chaque nouvelle opération de base de données. Dans certains cas, des codes d'erreur peuvent se produire, ce qui entraîne une défaillance des opérations de base de données ultérieures. Cela peut vous rendre très confus lors de la gestion de certaines opérations, car même s'il n'y a pas d'erreur dans les opérations suivantes, $ mysqli-> Errno renvoie toujours le code d'erreur de la dernière erreur.

Par exemple:

 <?php
$mysqli = new mysqli("localhost", "user", "password", "database");

$query1 = "SELECT * FROM valid_table";
$mysqli->query($query1);

$query2 = "SELECT * FROM non_existent_table";
$mysqli->query($query2);

// à ce moment-là,$mysqli->errno 依然会返回上次错误查询的Code d&#39;erreur,而不是当前查询的Code d&#39;erreur
if ($mysqli->errno) {
    echo "La requête a échoué,Code d&#39;erreur:" . $mysqli->errno;
}
?>

Dans le code ci-dessus, $ mysqli-> Errno peut ne pas afficher immédiatement le code d'erreur correct même si la deuxième requête échoue (requête pour une table qui n'existe pas). En fait, il peut afficher le code d'erreur pour la première requête (le cas échéant), provoquant une erreur de jugement.

3. Comment éviter ce problème

Pour éviter ce piège, la meilleure chose à faire est de réinitialiser manuellement MySqli :: $ errno à 0 chaque fois que vous effectuez une nouvelle opération de requête ou de base de données. Tous les codes d'erreur peuvent être effacés via la méthode MySQLI :: Clear_errors () .

 <?php
$mysqli = new mysqli("localhost", "user", "password", "database");

$query1 = "SELECT * FROM valid_table";
$mysqli->query($query1);

// Erreurs effacer manuellement
$mysqli->clear_errors();

$query2 = "SELECT * FROM non_existent_table";
$mysqli->query($query2);

if ($mysqli->errno) {
    echo "La requête a échoué,Code d&#39;erreur:" . $mysqli->errno;
}
?>

De cette façon, vous pouvez vous assurer que $ mysqli-> errno est propre avant chaque requête, en évitant les anciens codes d'erreur interférant avec les nouvelles opérations.

4. Conclusion

MySQLI :: $ Errno est une propriété très utile dans MySQLI qui peut nous aider à identifier et à gérer les erreurs de base de données. Cependant, il a une fosse cachée: elle ne réinitialise pas automatiquement. Cela signifie que si vous n'effacez pas le code d'erreur manuellement, le code d'erreur peut être conservé, ce qui affectera le traitement des erreurs des opérations suivantes. Pour éviter cela, il est recommandé d'effacer manuellement le code d'erreur à l'aide de la méthode MySQLI :: Clear_errors () avant d'effectuer une nouvelle opération de base de données.

  • Étiquettes associées:

    mysqli