Dans PHP, la fonction mysqli_autoCommit () est utilisée pour activer ou désactiver la fonction des transactions automatiquement. Par défaut, MySQL engage automatiquement les transactions après l'exécution de chaque requête. Mais dans certains cas, les développeurs peuvent avoir besoin de désactiver la fonction de mise en scène automatique afin que la cohérence des transactions soit maintenue lorsque plusieurs requêtes sont exécutées. Dans ce cas, le développeur doit appeler manuellement commit () ou rollback () pour commettre ou randonner la transaction.
Cependant, nous avons parfois des problèmes à engager des transactions, surtout lorsque vous utilisez mysqli_autocommit () . Afin de localiser ces problèmes, les deux propriétés de MySqli :: $ Errno et MySqli :: $ Erreur sont particulièrement importantes. MySQLI :: $ Errno peut nous aider à obtenir le code d'erreur pour les opérations MySQL, tandis que MySQLI :: $ Erreur fournit des informations d'erreur. En combinant ces deux attributs, les développeurs peuvent facilement déboguer et localiser des problèmes.
Tout d'abord, examinons un exemple de PHP de base, démontrant comment utiliser mysqli_autoCommit () pour le contrôle des transactions, et comment utiliser mysqli :: $ errno pour déboguer les erreurs lors de la création de transactions.
<?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ésactiver la soumission des transactions automatiques
$mysqli->autocommit(false);
// Démarrer une transaction
$mysqli->begin_transaction();
try {
// Exécuter la première requête
$mysqli->query("INSERT INTO users (username, email) VALUES ('user1', 'user1@m66.net')");
// Exécuter la deuxième requête
$mysqli->query("INSERT INTO orders (user_id, product) VALUES (1, 'product1')");
// Vérifiez s'il y a une erreur
if ($mysqli->errno) {
// S'il y a une erreur,Transactions en arrière
throw new Exception("erreur:".$mysqli->error);
}
// Soumettre les transactions
$mysqli->commit();
echo "Transaction Soumise avec succès!";
} catch (Exception $e) {
// Si une exception est capturée,Transactions en arrière
$mysqli->rollback();
echo "Rollback des transactions,erreur信息:" . $e->getMessage();
}
// Fermez la connexion de la base de données
$mysqli->close();
?>
Connectez-vous à la base de données: nous avons d'abord créé une connexion de base de données via un nouveau mysqli () pour nous connecter au serveur MySQL. Si la connexion échoue, obtenez le message d'erreur via $ mysqli-> connect_error et terminez le programme.
Désactivez Automatic Commit: Utilisez $ mysqli-> AutoCommit (FALSE) pour désactiver le mode de validation automatique. Cela signifie que la transaction ne sera pas soumise immédiatement après chaque requête, mais nécessite plutôt un appel manuel pour engager () pour s'engager.
Exécuter la transaction: nous commençons la transaction via $ mysqli-> begin_transaction () et effectuons l'opération d'insertion via $ mysqli-> query () . Si une erreur de requête se produit, $ mysqli-> errno renvoie le code d'erreur et $ mysqli-> error renvoie la description de l'erreur.
Gestion des erreurs: si une erreur se produit lors de l'exécution d'une requête, nous jugeons et attrapons l'erreur par if ($ mysqli-> errno) . Si l'erreur se produit, nous lançons une exception à l'aide de lancer une nouvelle exception () et de retourner la transaction ( $ mysqli-> rollback () ).
Commit Transaction: Si toutes les requêtes n'ont aucune erreur, nous appelons $ mysqli-> commit () pour engager la transaction.
Fermez la connexion: Enfin, fermez la connexion de la base de données à l'aide de $ mysqli-> close () .
Dans le code ci-dessus, $ mysqli-> errno est principalement utilisé pour déterminer si la requête est exécutée avec succès. Si la requête échoue, $ mysqli-> errno renvoie un code d'erreur non nul, tandis que $ mysqli-> error renvoie des informations de description d'erreur spécifiques. Grâce à ces informations, nous pouvons rapidement localiser le problème.
Si $ mysqli-> errno est 0 , aucune erreur ne s'est produite.
Si $ mysqli-> errno est une valeur non nulle, cela signifie qu'une erreur s'est produite. Nous pouvons utiliser $ mysqli-> Erreur pour afficher les informations d'erreur spécifiques.
Par exemple, s'il existe déjà des données en double dans le tableau provoquant l'échec de l'insert lors de l'exécution d'une requête d'insertion , MySQL renverra un code d'erreur 1062 (indiquant une erreur de clé en double). À l'heure actuelle, $ mysqli-> errno reviendra 1062 , tandis que $ mysqli-> L'erreur renvoie un message d'erreur comme "Entrée en double 'user1' pour Key 'primaire'".
1062 - Répéter l'erreur d'entrée (par exemple, duplication de la clé primaire)
1046 - Aucune base de données sélectionnée
1146 - Le tableau n'existe pas
2002 - La connexion à MySQL Server a échoué
Via $ mysqli-> errno et $ mysqli-> error , nous pouvons localiser efficacement la cause de l'erreur et prendre des mesures correspondantes en temps opportun.
Résumer
Lorsque vous utilisez mysqli_autoCommit () pour le contrôle des transactions, mysqli :: $ errno et mysqli :: $ error sont des outils de débogage très utiles lors de la rencontre des problèmes de validation. Ils peuvent aider les développeurs à localiser rapidement la cause des erreurs, ce qui débogage et résolvant les problèmes plus efficacement. Au cours du processus de développement réel, n'oubliez pas d'utiliser raisonnablement les mécanismes de gestion des transactions et des erreurs pour assurer la fiabilité et la stabilité des opérations de base de données.