Dans la programmation PHP, lorsque vous utilisez MySQLI pour effectuer des transactions de base de données, il est généralement nécessaire de s'assurer que chaque opération de la transaction est terminée en douceur. Si l'une de ces étapes échoue, nous devons être en mesure de déterminer avec précision quel lien est mauvais. La propriété MySQLI :: $ ERRNO peut nous aider à diagnostiquer la cause de l'échec des transactions. Cet article expliquera en détail comment déterminer quelle étape d'une transaction de base de données a échoué via mysqli :: $ errno .
Dans MySQLI, MySQLI :: $ Errno est une propriété qui représente le code d'erreur pour la dernière opération. Grâce à cette propriété, le mauvais code numérique peut être obtenu pour déterminer si l'opération est réussie ou a échoué. Si l'opération échoue, ERRNO renverra le code d'erreur correspondant, et en cas de succès, il renverra 0.
Démarrer une transaction
Avant de commencer une transaction, nous devons appeler MySQLI :: Begin_Transaction () pour démarrer une transaction.
$mysqli = new mysqli("localhost", "user", "password", "database");
if ($mysqli->connect_error) {
die("Échec de la connexion: " . $mysqli->connect_error);
}
// Démarrer une transaction
$mysqli->begin_transaction();
Effectuer des opérations SQL dans les transactions
Dans une transaction, nous pouvons exécuter plusieurs requêtes SQL. Nous vérifions le code d'erreur de chaque requête pour déterminer si les étapes ont échoué.
// Exécuter le premier SQL Requête
$result1 = $mysqli->query("UPDATE users SET balance = balance - 100 WHERE id = 1");
// 检查第一个Requête是否成功
if ($mysqli->errno) {
echo "erreur:Requête 1 échouer,erreur代码:" . $mysqli->errno;
$mysqli->rollback(); // Transactions en arrière
exit();
}
// Exécuter le second SQL Requête
$result2 = $mysqli->query("UPDATE users SET balance = balance + 100 WHERE id = 2");
// 检查第二个Requête是否成功
if ($mysqli->errno) {
echo "erreur:Requête 2 échouer,erreur代码:" . $mysqli->errno;
$mysqli->rollback(); // Transactions en arrière
exit();
}
// 如果所有Requête都成功,Soumettre les transactions
$mysqli->commit();
Dans cet exemple, nous effectuons deux mises à jour: le premier réduit le solde de l'utilisateur 1 par 100, et le second augmente le solde de l'utilisateur 2 par 100. Si une requête échoue, nous publions le code d'erreur en vérifiant MySqli :: $ Errno et annulez la transaction.
Vérifiez les erreurs via mysqli :: $ errno
La valeur de mysqli :: $ errno est mise à jour après la réalisation de chaque opération SQL. Si une opération échoue, MySQLI :: $ Errno renvoie le code d'erreur correspondant et nous pouvons utiliser ces codes d'erreur pour déterminer le problème. Par exemple, si vous effectuez une opération de mise à jour, le code d'erreur suivant peut apparaître:
1062 : indique une erreur de clé en double.
1451 : indique une erreur de contrainte de clé étrangère.
Dans le code ci-dessus, nous vérifions si ($ mysqli-> errno) si Errno a une valeur. Si c'est le cas, cela signifie que la requête a échoué, et nous pouvons analyser davantage le problème en fonction du code d'erreur fourni par MySqli :: $ Errno .
Erreurs dans le traitement des transactions
Si une opération dans la transaction échoue, nous devons faire reculer l'intégralité de la transaction. Utilisez MySQLI :: Rollback () pour annuler toutes les opérations SQL exécutées pour vous assurer que la base de données est cohérente. Dans l'exemple de code ci-dessus, nous appelons Rollback () lorsque chaque requête échoue, puis arrêtons l'exécution du script par sortie () .
De plus, une fois la transaction terminée, s'il n'y a pas d'erreur, nous utilisons MySQLI :: commit () pour engager la transaction pour garantir que toutes les modifications sont enregistrées dans la base de données.
Grâce à mysqli :: $ errno , nous pouvons déterminer avec précision quelle opération a échoué dans une transaction de base de données. Cette approche est très efficace pour le débogage et la gestion des erreurs et peut nous aider à localiser les problèmes et à prendre des mesures appropriées dans des transactions complexes. N'oubliez pas que si une erreur se produit pendant le traitement des transactions, la transaction doit être annulée immédiatement pour éviter les incohérences de données.
J'espère que cet article vous aidera à mieux comprendre comment utiliser mysqli :: $ errno en php pour déterminer les étapes d'erreur dans les transactions. Si vous rencontrez des problèmes dans votre application réelle, vous pouvez analyser et résoudre le problème en recherchant le tableau du code d'erreur MySQL.