Perl DBI - la Capture des erreurs
Quelle est la meilleure façon de capturer tout DBI erreurs en Perl? Par exemple, si une insertion échoue parce qu'il y avait des caractères illégaux dans les valeurs de l'insertion de comment puis-je ne pas avoir le script échoue, mais la capture de l'erreur et de gérer de manière appropriée.
Je ne veux pas faire le "or die" parce que je ne veux pas arrêter l'exécution du script.
OriginalL'auteur Chris | 2011-01-27
Vous devez vous connecter pour publier un commentaire.
Utiliser le
RaiseError=>1
de configuration dansDBI->connect
, et envelopper vos appels à la$dbh
et$sth
dans un bloc try (TryCatch et Essayez::Minuscule sont bonnes implémentations pour les blocs try).Voir les docs pour plus d'informations sur d'autres relier les variables disponibles.
par exemple:
connect
dans letry
bloc?ce n'est pas nécessaire - connect renvoie undef en cas d'échec. (Voir les docs - vous juste besoin de vérifier si un $dbh a été retourné.)
mais vous ne pas vérifier.
que pensez-vous qui va se produire lorsque vous essayez d'appeler une méthode sur une référence non définie ($dbh)? Il va mourir, qui va être pris par le bloc try/catch. C'est bien dans ce cas, la connexion est faite immédiatement avant de l'utiliser, mais dans le code de production (qui peut se connecter à long avant la première db requête), vous pourriez vouloir faire autre chose. De même, dans le code de production, vous voudrez peut-être avoir un traitement spécial pour les connexions qui ont expiré. tl;dr version: lire attentivement le manuel d'utilisation notes sur n'importe quelle méthode que vous appelez!
OriginalL'auteur Ether
vous pouvez également effectuer les opérations suivantes, qui vous permettra de mourir, ou de traiter les erreurs et de continuer.
OriginalL'auteur tquiring