Maison > développement back-end > tutoriel php > Résoudre les problèmes rencontrés dans les transactions de base de données PHP

Résoudre les problèmes rencontrés dans les transactions de base de données PHP

不言
Libérer: 2023-04-05 20:14:02
avant
2874 Les gens l'ont consulté

Le contenu de cet article concerne la résolution des problèmes rencontrés dans les transactions de base de données PHP. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

Un problème découvert lors de l'utilisation de l'extension PDO de php. Après l'ouverture de la transaction, si la connexion entre php et mysql est déconnectée, php enregistrera directement une exception d'avertissement au lieu de la lancer directement. le processus de levée d'une exception

est le suivant :

/**
 * 一个用户财产变更的场景下
 */

try {
    // 1. 开启事务

    /**
     * 2. 变更用户财产,增加财产变更的流水记录
     */

    // 3. 提交事务
} catch (\Exception $e) {
    // 4. 回滚事务

    // 5. 记错误日志

    // 6. 抛出异常
}

// 7. 发布用户财产变更的广播
Copier après la connexion

Les opérations ci-dessus peuvent être simplement divisées en cinq catégories. D'après ma compréhension précédente, le processus général d'exploitation des transactions est le même que ci-dessus. Il n'y a pas Si une exception est levée, la transaction est soumise avec succès
Mais jusqu'au jour où l'exception de base de données se produit, une transaction a été démarrée. Pendant le processus 1-2 ci-dessus, la base de données se bloque directement, puis la transaction est lancée. soumis à l'étape 3. Parfois, une warning erreur de niveau apparaîtra directement, "SQLSTATE[HY000]: General error: 2006 MySQL server has gone away" , aucune exception n'est détectée
, donc dans les étapes suivantes de l'étape 7, d'autres parties commerciales obtiennent l'ID de transaction non soumis et établissent des statistiques, mais dans fait La propriété de l'utilisateur n'est pas augmentée. Cela a conduit au problème

Quand j'étais perplexe, j'ai regardé la documentation et j'ai trouvé un bug qui existe depuis longtemps : https://bugs.php.net/bug.php?.. .

Plus tard, nous avons résolu le problème en configurant temporairement set_error_handler à l'emplacement de la transaction

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:segmentfault.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal