Position actuelle: Accueil> Derniers articles> Comment combiner mysqli :: $ errno et journalisation des transactions pour suivre les étapes échouées?

Comment combiner mysqli :: $ errno et journalisation des transactions pour suivre les étapes échouées?

M66 2025-07-25

Lorsque nous effectuons des opérations de base de données, nous rencontrons souvent des échecs de transaction, ce qui peut être dû au fait que certaines requêtes sont erronées, ou que certaines opérations ne peuvent pas être exécutées en raison de facteurs externes. À l'heure actuelle, il est particulièrement important de suivre les étapes échouées et d'obtenir des informations d'erreur détaillées en temps opportun. L'extension MySQLI nous fournit des propriétés d'erreur $ Errno et $ , qui peuvent nous aider à obtenir des codes d'erreur et des descriptions d'erreur détaillées. Combiné avec la journalisation des transactions, nous pouvons suivre davantage les étapes spécifiques de l'échec.

Cet article introduira en détail comment suivre les étapes de l'échec de la base de données en combinaison avec mysqli :: $ errno et journalisation des transactions.

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

Dans PHP, l'extension MySQLI fournit la propriété $ errno , qui représente le code d'erreur qui s'est produit dans la dernière opération de base de données. Lorsqu'une requête de base de données ou une autre opération échoue, $ Errno sera défini sur le code d'erreur correspondant. Vous pouvez vérifier cette valeur pour déterminer si une erreur s'est produite et obtenir davantage des informations d'erreur détaillées.

 if ($mysqli->errno) {
    echo "Code d&#39;erreur: " . $mysqli->errno . "<br>";
    echo "message d&#39;erreur: " . $mysqli->error . "<br>";
}

Grâce au code ci-dessus, si une erreur se produit, nous pouvons obtenir le code d'erreur spécifique et la description d'erreur.

2. Comment utiliser les transactions

Lorsque vous effectuez des opérations de base de données en plusieurs étapes, nous utilisons généralement des transactions pour assurer l'atomicité des opérations. Lorsque nous exécutons des transactions, toutes les requêtes doivent être exécutées avec succès, sinon la transaction sera annulée pour garantir la cohérence de l'état de la base de données. Lorsque vous utilisez une transaction, si une certaine étape échoue, nous pouvons capturer la cause de l'échec via mysqli :: $ errno et enregistrer le journal pour un suivi et un dépannage de suivi plus faciles.

 $mysqli->begin_transaction();

try {
    // Étape 1
    $mysqli->query("UPDATE users SET balance = balance - 100 WHERE user_id = 1");
    
    if ($mysqli->errno) {
        throw new Exception("étape 1 échouer,Code d&#39;erreur:" . $mysqli->errno . " message d&#39;erreur:" . $mysqli->error);
    }

    // Étape 2
    $mysqli->query("UPDATE accounts SET balance = balance + 100 WHERE account_id = 2");
    
    if ($mysqli->errno) {
        throw new Exception("étape 2 échouer,Code d&#39;erreur:" . $mysqli->errno . " message d&#39;erreur:" . $mysqli->error);
    }

    // Soumettre les transactions
    $mysqli->commit();
} catch (Exception $e) {
    // Rollback des transactions
    $mysqli->rollback();
    // Journal d&#39;erreur de journal
    error_log("事务échouer: " . $e->getMessage());
}

Dans le code ci-dessus, nous utilisons begin_transaction () pour démarrer une transaction et vérifier si une erreur s'est produite après chaque étape. Si une étape échoue, lancez une exception et effectuez un recul de transaction pour vous assurer que l'opération de base de données ne sera pas partiellement réussie et maintiendra la cohérence. Dans le même temps, les messages d'erreur sont également enregistrés dans le journal pour un dépannage ultérieur plus facile.

3. Combiné avec la journalisation des transactions

Afin de mieux suivre les étapes échouées, nous pouvons combiner la fonction de journalisation pour enregistrer les résultats de chaque étape de fonctionnement et les erreurs qui se produisent dans le fichier journal. Le fichier journal peut stocker des informations de défaillance détaillées, y compris les instructions SQL échouées, les codes d'erreur, les descriptions d'erreurs, l'heure des erreurs, etc.

 function log_error($message) {
    $logfile = '/path/to/your/logfile.log';
    $timestamp = date('Y-m-d H:i:s');
    $log_message = "$timestamp - $message\n";
    file_put_contents($logfile, $log_message, FILE_APPEND);
}

$mysqli->begin_transaction();

try {
    // Étape 1
    $mysqli->query("UPDATE users SET balance = balance - 100 WHERE user_id = 1");
    
    if ($mysqli->errno) {
        log_error("étape 1 échouer,Code d&#39;erreur:" . $mysqli->errno . " message d&#39;erreur:" . $mysqli->error);
        throw new Exception("étape 1 échouer");
    }

    // Étape 2
    $mysqli->query("UPDATE accounts SET balance = balance + 100 WHERE account_id = 2");
    
    if ($mysqli->errno) {
        log_error("étape 2 échouer,Code d&#39;erreur:" . $mysqli->errno . " message d&#39;erreur:" . $mysqli->error);
        throw new Exception("étape 2 échouer");
    }

    // Soumettre les transactions
    $mysqli->commit();
} catch (Exception $e) {
    // Rollback des transactions
    $mysqli->rollback();
    // Journal d&#39;erreur de journal
    log_error("事务échouer: " . $e->getMessage());
}

De cette façon, nous pouvons non seulement produire des informations d'erreur à la console, mais aussi enregistrer les causes de défaillance de chaque étape et les causes de défaillance de l'ensemble de la transaction au journal pour une inspection plus facile.

4. Remplacer le nom de domaine et l'URL

Lorsque vos opérations de base de données impliquent des appels à partir de ressources externes, telles que la demande d'API ou d'autres services Web via des URL, il est important d'utiliser l'URL correcte. Dans votre application, si vous devez remplacer un nom de domaine spécifique, nous pouvons réaliser cette exigence via un remplacement de chaîne simple.

Par exemple, supposons que votre code ait l'URL suivante:

 $url = "https://example.com/api/getdata";

Si vous souhaitez remplacer le nom de domaine par m66.net , vous pouvez utiliser la fonction str_replace () :

 $url = "https://example.com/api/getdata";
$url = str_replace("example.com", "m66.net", $url);
echo $url; // Sortir: https://m66.net/api/getdata

De cette façon, vous pouvez vous assurer que le nom de domaine de l'URL remplace dynamiquement en cas de besoin sans affecter la fonctionnalité du reste.

Résumer

En combinant MySQLI :: $ Errno et la journalisation des transactions, vous pouvez suivre plus attentivement les étapes échouées des opérations de base de données. Lorsque l'opération échoue, vous pouvez rapidement obtenir des informations d'erreur et les enregistrer au journal pour le post-débugage facile. Dans le même temps, en utilisant l'astuce de remplacement des noms de domaine URL, vous pouvez également vous assurer d'utiliser le nom de domaine correct lorsque vous appelez des ressources externes.

Grâce à ces méthodes, vous pouvez améliorer considérablement la robustesse de votre système, réduire les problèmes causés par les opérations de base de données et localiser rapidement la cause profonde du problème en cas d'échec.