Ludovic ROLAND

Blog technique sur mes expériences de développeur.

Interagir avec une base de données en Perl 5 grâce au module DBI (3/7) : Connexion et déconnexion

26 mars 2021

Dans les chapitres précédents, nous avons pris le temps de comprendre la base de données sur laquelle nous allons travailler par la suite dans ce tutoriel.

Il est maintenant temps de se jeter à l’eau et d’attaquer la programmation en Perl. Dans ce chapitre, nous allons voir ensemble le code minimal qu’il faudra écrire lorsque vous manipulerez des bases de données en Perl, à savoir la connexion et la déconnexion.

Plan

La connexion

Cette première partie va nous permettre de détailler les différentes parties du script minimal, nécessaire à notre connexion à la base “Zvoitures”.

L’en-tête du script

Puisqu’il faut bien commencer par le début, nous allons tout d’abord décrire l’en-tête de notre script de connexion.

Si vous avez déjà eu l’occasion de travailler avec des modules, cette partie ne devrait pas vous poser de problème. Les autres vont devoir apprendre un nouveau mot-clef : use.

Son utilisation est toute simple. On indique en fait à notre script que l’on souhaite utiliser le module DBI (dans notre cas). Ainsi, le mot use sera suivi du module que l’on souhaite utiliser.

Voici donc l’en-tête que chacun doit avoir :

#!/usr/bin/perl -w

use strict;
use DBI; #Permet d'utiliser le module DBI

À noter que l’utilisation de strict n’est pas une obligation, mais le langage Perl étant très permissif, son utilisation permet aux débutants (et aux autres) de coder de manière plus propre.

Les paramètres

Vous l’imaginez bien, se connecter à une base de données nécessite un certain nombre d’informations. Plutôt que de vous les faire deviner, en voici la liste :

  • les pilotes du SGBD ;
  • le nom de la base de données ;
  • l’endroit où se trouve la base de données ;
  • le login ;
  • le mot de passe.

Dans un premier temps, je vous propose de stocker ces différentes informations dans des variables.

Voici ce que vous devez obtenir :

my $base = 'Zvoitures'; #Le nom de la base
my $host = '127.0.0.1'; #L'endroit où est stockée la base (ici c'est localhost)
my $login = 'root';     #Le login utilisateur
my $mdp = '';           #Le mot de passe (ici, il n'y en a pas)

La connexion

Félicitations ! Si vous êtes arrivés jusqu’ici, c’est vraiment que votre motivation est inébranlable ! Nous allons enfin pouvoir étudier la fonction qui nous permet de nous connecter à notre base de données.

Il s’agit de la fonction connect() de l’objet DBI. Cette fonction prend pour paramètres les différentes informations que nous avons stocké précédemment dans des variables.

Voici donc la fameuse connexion :

my $dbd = DBI->connect("dbi:mysql:dbname=$base;host=$host;", $login, $mdp)
    or die 'Impossible de se connecter à la base de données : '.DBI::errstr;

Les mots clefs or die permettent de gérer les éventuelles erreurs de connexion à la base de données. Ainsi, s’il y a un problème avec la connexion, le or die permet d’arrêter le programme et d’afficher le message d’erreur. La variable DBI::errstr permet d’afficher à l’écran la raison exacte du problème.

Si la connexion se fait sans problème, vous n’aurez rien de spécial à l’écran.

À noter que les pilotes utilisés constituent le premier paramètre que l’on indique à notre fonction connect(). N’hésitez surtout pas à adapter la syntaxe dans le cas où vous n’utiliseriez pas MySQL !

Je crois qu’on a fait le tour. Vous êtes maintenant prêts à essayer votre connexion !

Des problèmes ?

Pas de panique ! Je vous propose de voir les points qui sont peut-être à l’origine de votre problème.

Le script complet

Peut-être n’avez-vous pas réussi à reconstituer le puzzle du chapitre précédent. C’est pourquoi je propose de vous fournir le code complet du script de connexion. N’hésitez pas à le copier-coller, afin de vérifier si le problème ne vient pas de là !

Voici le monstre :

#!/usr/bin/perl -w

use strict;
use DBI;

#Les paramètres
my $base = 'Zvoitures';
my $host = '127.0.0.1';
my $login = 'root';
my $mdp = '';

#La connexion
my $dbd = DBI->connect("dbi:mysql:dbname=$base;host=$host;", $login, $mdp)
    or die 'Impossible de se connecter à la base de données : '.DBI::errstr;

MySQL est-il lancé ?

Peut-être avez-vous simplement oublié de démarrer MySQL ?

Utilisateurs de Windows

Pour les utilisateurs de Windows, vérifiez que le logo de WAMPP apparaît bien en bas à droite dans la barre des tâches. Si ce n’est pas le cas, n’hésitez surtout pas à relancer le soft via le menu “Démarrer”.

Utilisateurs de Mac

Comme pour les utilisateurs de Windows, je vous invite à lancer le logiciel via votre dossier “Applications”.

Utilisateurs de Linux

Vous pouvez vérifier l’état de fonctionnement via la commande :

sudo /opt/lampp/lampp status

Deux types de réponses peuvent alors apparaître :

Version: XAMPP for Linux 1.7.3a
Apache is running.
MySQL is running.
ProFTPD is running.

Cette réponse signifie que tout semble fonctionner et que le problème vient d’ailleurs.

Apache is not running.
MySQL is not running.
ProFTPD is not running

Cette seconde réponse indique que les différents outils (dont MySQL) ne tournent pas. N’oubliez surtout pas de les lancer avec :

sudo /opt/lampp/lampp start

Vérifier le mot de passe et l’utilisateur

Je vous encourage également à vérifier vos identifiants de connexion à la base de données.

Pour ça, ouvrez MySQL et allez faire un tour dans l’onglet “Privilèges”. Vous devriez alors avoir un tableau des utilisateurs avec pour chacun son nom et son mot de passe.

Vérifier le “host”

Certains d’entre vous auront peut-être une erreur parlant de socket.

Assurez-vous d’avoir bien stocké dans votre variable $host la chaîne de caractères “127.0.0.1” et non “localhost”.

Même si ces 2 mots sont synonymes pour les informaticiens, ils ne le sont visiblement pas pour MySQL.

La variable $dbh

Avant de montrer la fonction qui va vous permettre de fermer votre connexion proprement, je voudrais vous dire quelques mots sur la variable $dbd.

Cette variable est ce que l’on appelle un descripteur de base. Ce descripteur est attaché à la base de données sur laquelle nous travaillons grâce à la fonctionconnect() du module DBI.

À noter que j’ai nommé ma variable$dbd par convention, mais vous pouvez bien entendu lui donner le nom que vous souhaitez.

C’est d’ailleurs ce descripteur qui va nous permettre immédiatement de nous déconnecter de la base de données et par la suite de faire des requêtes SQL.

La déconnexion

Se déconnecter d’une base de données en Perl est extrêmement simple, puisqu’une seule instruction suffit.

Nous allons utiliser la méthode disconnect de notre descripteur de base.

Voici alors ce que nous obtenons :

$dbd->disconnect;

Comme vous pouvez le constater, la déconnexion se passe de commentaire. Il suffit de placer cette instruction à l’endroit de votre script où vous souhaitez vous déconnecter pour l’être instantanément !

Maintenant que vous savez ouvrir et fermer une connexion, je vous propose de s’attaquer à l’exécution de nos premières requêtes !

Commentaires