Dans PHP, l'utilisation de l'extension MySQLI peut nous aider à interagir avec la base de données MySQL, où l'erreur MySQLI_STMT :: $ est une fonction très utile qui peut être utilisée pour obtenir des informations d'erreur liées aux instructions de prétraitement. Lorsque nous effectuons des opérations de base de données, les erreurs peuvent provoquer une incohérence des données, en particulier dans les opérations en plusieurs étapes. Pour assurer la fiabilité de l'opération, nous pouvons utiliser la fonction d'erreur MySQLI_STMT :: $ en combinaison avec la fonction de gestion des transactions pour gérer les erreurs et reculer lorsqu'une erreur se produit, garantissant ainsi la cohérence et l'intégrité des données.
MySQLI_STMT :: $ L'erreur est une propriété de la classe MySQLI_STMT qui renvoie les informations d'erreur liées à l'instruction de prétraitement récemment exécutée. Cette propriété est très importante pour le débogage et la garantie de l'exactitude des déclarations SQL. Il renvoie une chaîne contenant le message d'erreur, et si aucune erreur ne se produit, une chaîne vide.
Une transaction est une collection d'opérations qui réussissent ou échouent. La gestion des transactions dans MySQL peut nous aider à nous assurer que lors de l'exécution de plusieurs opérations, nous pouvons restaurer à l'état de préopération même si une erreur se produit au milieu. En effectuant plusieurs opérations dans une transaction, nous pouvons assurer la cohérence et l'intégrité de nos données.
Dans MySQL, les transactions peuvent être contrôlées via les instructions SQL suivantes:
Commencez ou démarrez la transaction : démarrez une transaction.
Commit : soumettre des transactions afin que les modifications apportées en permanence.
Rollback : Rollback la transaction et révoquez toutes les modifications de la transaction.
Lorsque vous effectuez des opérations de base de données, en particulier lorsque plusieurs étapes de mises à jour de données sont impliquées, nous devons nous assurer que chaque étape est réussie. Si l'une de ces étapes échoue, l'intégralité de la transaction doit être annulée pour éviter certaines mises à jour de données avec succès tandis que d'autres échouent, entraînant une incohérence dans les données. Nous pouvons utiliser MySQLI_STMT :: $ ERROR pour capturer le message d'erreur des instructions SQL et faire reculer la transaction lorsqu'une erreur se produit.
Voici un exemple simple montrant comment combiner la fonction MySQLI_STMT :: $ Erreur avec Rollback de la transaction:
<?php
// Créer une connexion de base de données
$mysqli = new mysqli("localhost", "username", "password", "database");
// Vérifiez si la connexion réussit
if ($mysqli->connect_error) {
die("Échec de la connexion: " . $mysqli->connect_error);
}
// Démarrer une transaction
$mysqli->begin_transaction();
try {
// La première opération de requête
$stmt = $mysqli->prepare("INSERT INTO users (username, email) VALUES (?, ?)");
$stmt->bind_param("ss", $username, $email);
$username = 'johndoe';
$email = '[email protected]';
$stmt->execute();
// Vérifier les erreurs
if ($stmt->error) {
throw new Exception("Une erreur s'est produite lors de l'exécution d'une requête: " . $stmt->error);
}
// La deuxième opération de requête
$stmt = $mysqli->prepare("UPDATE accounts SET balance = balance - 100 WHERE user_id = ?");
$stmt->bind_param("i", $user_id);
$user_id = 1;
$stmt->execute();
// Vérifier les erreurs
if ($stmt->error) {
throw new Exception("Une erreur s'est produite lors de l'exécution d'une requête: " . $stmt->error);
}
// Soumettre les transactions
$mysqli->commit();
echo "L'opération est réussie!";
} catch (Exception $e) {
// Si une erreur se produit,Transactions en arrière
$mysqli->rollback();
echo "L'opération a échoué: " . $e->getMessage();
}
// Fermer la connexion
$mysqli->close();
?>
Démarrer une transaction:
Nous utilisons $ mysqli-> begin_transaction (); Pour démarrer une transaction. Cela fera les prochaines opérations de base de données dans la même transaction.
Effectuer des opérations de base de données:
Utilisez l'instruction de prétraitement MySQLI pour effectuer deux opérations de base de données: une opération d'insertion et une opération de mise à jour. Après chaque opération, nous vérifions si une erreur s'est produite. Si une erreur se produit, nous lançons une exception via lancez une nouvelle exception et faisant reculer la transaction dans la gestion des exceptions.
Vérifiez les erreurs:
Nous obtenons le message d'erreur lorsque l'exécution de SQL est effectuée via $ stmt-> erreur . Si une erreur se produit, nous allons lancer une exception et faire reculer la transaction. De cette façon, les opérations précédentes et les opérations suivantes seront révoquées pour garantir la cohérence des données.
Retournez la transaction:
Si une exception est capturée pendant le fonctionnement, nous ferons en arrière la transaction en utilisant $ mysqli-> rollback () ;. Cela annulera toutes les modifications apportées à la transaction, empêchant certaines données d'être mises à jour avec succès tandis que d'autres ne sont pas mis à jour.
Soumettre la transaction:
Si toutes les opérations sont exécutées avec succès, nous soumettons la transaction en utilisant $ mysqli-> commit (); Pour s'assurer que les modifications sont enregistrées en permanence dans la base de données.
En combinant le mécanisme MySQLI_STMT :: $ Erreur et le mécanisme de retour de transaction, nous pouvons assurer la fiabilité des opérations de base de données. Lorsque plusieurs opérations de base de données sont effectuées, si une opération échoue, la transaction peut être reculée pour éviter les incohérences de données. Cette méthode améliore non seulement la robustesse du code, mais garantit également que les données ne seront pas endommagées lorsque des erreurs se produisent. Il s'agit d'un mode de gestion des erreurs courant en développement.