2010-08-04 11 views

Répondre

12

Vous pouvez vous demander poignée de base de données si elle est connectée en appelant

$dbh->ping(); 

Certains pilotes DB ne mettent pas en œuvre ping mais DBD :: mysql fait. Une alternative consiste à exécuter une sélection vide comme select 1 pour MySQL. Je suppose MySQL puisque c'est ainsi que votre question est taguée. D'autres bases de données auront des réponses légèrement différentes.

1

La méthode ping - bien que cela dépende du pilote de la base de données.

4

Cette réponse comporte deux parties. La première réponse est {Active}. perldoc DBI dit:

attributs communs à tous ANSES

Ces attributs sont communs à tous les types de poignées DBI. [...]

"Active" (booléen, lecture seule)

L'attribut "actif" est vrai si l'objet poignée est "actif". C'est rarement utilisé dans les applications. La signification exacte de est quelque peu vague au moment. Pour une base de données gérer signifie généralement que le handle est connecté à une base de données ("$ dbh-> disconnect" définit "Active" off).

C'est probablement ce que vous voulez vérifier.

La deuxième réponse est que, tandis que vous pouvez appeler ping(), ou vérifier le résultat de SELECT 1, il n'y a pas beaucoup de point. Cela vous indiquera en effet si le handle de la base de données est connecté au moment de cette vérification. Mais ce que vous voulez vraiment savoir, c'est si le gestionnaire de base de données est connecté lorsque vous faites ce que vous êtes sur le point de faire, n'est-ce pas? Et il y a toujours une chance que la connexion échoue entre votre chèque et tout ce que vous voulez réellement faire. Donc, un vrai résultat de l'un ou l'autre n'est pas une garantie de quoi que ce soit.

Si vous effectuez une surveillance d'état, un ping() ou un SELECT 1 fonctionnera correctement. Dans une application, cependant, ne vérifiez pas la validité d'un dhp avant de faire quelque chose. Connectez-vous simplement et utilisez le dbh que vous récupérez, et effectuez une vérification d'erreur appropriée à chaque étape. Il n'y a pas de substitut pour vérifier correctement les erreurs.

1

il y a aussi $dbh->state()

mais ouais contrôle d'erreur appropriée à chaque appel est plus certain.