Position actuelle: Accueil> Derniers articles> Comment créer une erreur basée sur l'errno

Comment créer une erreur basée sur l'errno

M66 2025-05-17

La stabilité des opérations de base de données est cruciale lors du développement d'applications PHP. Surtout pour les applications à haute curances, comment gérer les défaillances de connexion de la base de données ou les erreurs de requête et implémenter un mécanisme de réessayer d'erreur efficace est devenu un problème rencontré par de nombreux développeurs. Dans cet article, nous explorerons comment utiliser MySqli :: $ Errno pour implémenter une erreur d'erreur efficace pour améliorer la logique pour améliorer la stabilité des opérations de base de données.

Qu'est-ce que MySqli :: $ Errno ?

Dans l'extension MySQLI de PHP, l'attribut $ Errno stocke le code d'erreur de la dernière opération MySQL. Lorsque nous effectuons des opérations de base de données, si une erreur se produit, MySQL renvoie un code d'erreur et ce code d'erreur peut être obtenu via la propriété MySQLI :: $ Errno . Selon le code d'erreur, nous pouvons décider de réessayer.

Scénario de réessayer d'erreur

Les erreurs courantes dans les opérations de base de données comprennent:

  • Pinage de réseau temporaire

  • Le nombre de connexions de base de données atteint la limite supérieure

  • Le service MySQL est temporairement indisponible, etc.

Ces erreurs sont généralement temporaires et nous pouvons améliorer la stabilité de l'application par le biais de stratégies de réessayer appropriées. Si vous pouvez déterminer rapidement le type d'erreur et réessayer au bon moment, il peut considérablement réduire les risques de défaillance de fonctionnement de la base de données causés par des erreurs occasionnelles.

Build Error Reprys Logic

Ensuite, nous implémenterons une logique de réessayer d'erreur basée sur mysqli :: $ errno avec un exemple. Nous essaierons de nous connecter à la base de données et de réessayer en cas d'échec de la connexion.

 <?php
// Définir les paramètres de connexion de la base de données
$host = 'localhost';
$username = 'root';
$password = '';
$database = 'test_db';

// Définissez le nombre maximum de temps de réessayer
$maxRetries = 3;
$retryInterval = 2; // Temps d&#39;intervalle de réception(Deuxième)

// Créer une connexion de base de données
function createConnection($host, $username, $password, $database) {
    $connection = new mysqli($host, $username, $password, $database);
    
    // Vérifiez si la connexion réussit
    if ($connection->connect_error) {
        echo "Échec de la connexion: " . $connection->connect_error . "\n";
        return false;
    }
    return $connection;
}

// Essayez de vous connecter et réessayez
function tryConnection($host, $username, $password, $database, $maxRetries, $retryInterval) {
    $retries = 0;
    $connection = null;
    
    while ($retries < $maxRetries) {
        $connection = createConnection($host, $username, $password, $database);
        if ($connection) {
            // Connexion avec succès,Retour à l&#39;objet de connexion
            return $connection;
        }
        
        // Obtenez le code d&#39;erreur
        $errno = $connection->connect_errno;
        
        // Déterminez s&#39;il s&#39;agit d&#39;une erreur temporaire basée sur le code d&#39;erreur
        if ($errno == 2002 || $errno == 1040) {
            // Par exemple:2002Indique que le serveur de base de données ne peut pas être connecté,1040Indique qu&#39;il y a trop de connexions de base de données
            echo "数据库Échec de la connexion,Réessayant...(Code d&#39;erreur:$errno)\n";
            $retries++;
            sleep($retryInterval); // Attendez un moment avant de réessayer
        } else {
            // Si l&#39;erreur est un autre type,Terminer la réessayer
            echo "Échec de la connexion,Code d&#39;erreur:$errno\n";
            break;
        }
    }
    
    if ($retries == $maxRetries) {
        echo "Nombre maximum de retraits atteints,Impossible de se connecter à la base de données。\n";
        return null;
    }
    
    return $connection;
}

// Appelez la fonction de réessayer
$connection = tryConnection($host, $username, $password, $database, $maxRetries, $retryInterval);
if ($connection) {
    echo "数据库Connexion avec succès!\n";
    // Effectuer d&#39;autres opérations de base de données...
} else {
    echo "Impossible de se connecter à la base de données,Veuillez réessayer plus tard。\n";
}
?>

Expliquez le code

  1. Fonction de connexion CreateConnection () : Cette fonction est utilisée pour créer une connexion de base de données MySQL et renvoyer l'objet de connexion. Si la connexion échoue, false est renvoyé.

  2. Fonction de réessayer tryConnection () : Dans cette fonction, nous implémentons le mécanisme de réessayer. Il essaiera de se connecter à la base de données, et si la connexion échoue, il décidera de réessayer en fonction du code d'erreur. Nous utilisons Connect_errno pour obtenir le code d'erreur et vérifiez s'il s'agit d'une erreur de connexion temporaire (telle que des problèmes de réseau, trop de connexions de base de données, etc.). Si c'est le cas, nous attendrons un certain temps avant de réessayer jusqu'à ce que le nombre maximal de tentatives soit atteinte.

  3. Jugement du code d'erreur :

    • Le code d'erreur 2002 indique que le serveur de base de données ne peut pas être connecté.

    • Le code d'erreur 1040 indique qu'il y a trop de connexions de base de données.

Optimisation supplémentaire

Nous pouvons porter des jugements à travers plus de codes d'erreur, afin de prendre des décisions plus intelligentes sur les différentes erreurs. Par exemple:

  • Code d'erreur 2003 : indique que la connexion au serveur MySQL n'est pas accessible ou que le serveur n'est pas démarré.

  • Code d'erreur 1045 : indique que le nom d'utilisateur ou le mot de passe est mauvais. Il s'agit d'une erreur de configuration explicite et ne doit pas être réessayée.

Pour chaque code d'erreur, nous pouvons définir un autre intervalle de réessayer ou terminer directement la réessayer.

Résumer

En utilisant MySQLI :: $ Errno pour déterminer le type d'erreur dans l'opération de la base de données, nous pouvons implémenter un mécanisme de réessayer d'erreur efficace pour éviter les défaillances de connexion de la base de données causées par les interruptions réseau ou les erreurs temporaires. La définition raisonnable du nombre maximum de temps de réessayer et l'intervalle de réessayer peut efficacement améliorer la stabilité des opérations de base de données, en particulier dans des environnements de concurrence élevés. Avec ces compétences maîtrisées, vous pouvez mieux contrôler l'interaction entre l'application et la base de données et assurer la fiabilité du système.