Se connecter à la base de données en PHP



Pour pouvoir travailler avec la base de données en PHP, il faut d'abord s'y connecter.

Nous allons apprendre dans ce chapitre à lire des données dans une BDD (base de données). Or, je vous rappelle que PHP doit faire l'intermédiaire entre vous et MySQL. Problème : PHP ne peut pas dire à MySQL dès le début « Récupère-moi ces valeurs ». En effet, MySQL demande d'abord un nom d'utilisateur et un mot de passe. S'il ne le faisait pas, tout le monde pourrait accéder à votre BDD et lire les informations (parfois confidentielles !) qu'elle contient.

Il va donc falloir que PHP s'authentifie : on dit qu'il établit une connexion avec MySQL. Une fois que la connexion sera établie, vous pourrez faire toutes les opérations que vous voudrez sur votre base de données !


Comment se connecte-t-on à la base de données en PHP ?



Bonne question ! En effet, PHP propose plusieurs moyens de se connecter à une base de données MySQL.

  • L'extension mysql_ : ce sont des fonctions qui permettent d'accéder à une base de données MySQL et donc de communiquer avec MySQL. Leur nom commence toujours par mysql_. Toutefois, ces fonctions sont vieilles et on recommande de ne plus les utiliser aujourd'hui.
  • L'extension mysqli_ : ce sont des fonctions améliorées d'accès à MySQL. Elles proposent plus de fonctionnalités et sont plus à jour.
  • L'extension PDO : c'est un outil complet qui permet d'accéder à n'importe quel type de base de données. On peut donc l'utiliser pour se connecter aussi bien à MySQL que PostgreSQL ou Oracle.

Ce sont toutes des extensions car PHP est très modulaire. On peut très facilement ajouter ou supprimer des éléments à PHP, car tout le monde n'a pas forcément besoin de toutes les fonctionnalités.

Quel moyen choisir parmi tous ceux-là ?



Vous l'aurez compris, les fonctions mysql_ ne sont plus à utiliser (on dit qu'elles sont « obsolètes »). Il reste à choisir entre mysqli_ et PDO. Nous allons ici utiliser PDO car c'est cette méthode d'accès aux bases de données qui va devenir la plus utilisée dans les prochaines versions de PHP. D'autre part, le gros avantage de PDO est que vous pouvez l'utiliser de la même manière pour vous connecter à n'importe quel autre type de base de données (PostgreSQL, Oracle…) (figure suivante).

PDO permet de se connecter à n'importe quel type de base de données



Vous pourrez donc réutiliser ce que vous allez apprendre si vous choisissez d'utiliser une autre base de données que MySQL.


Activer PDO



Normalement, PDO est activé par défaut. Pour le vérifier (voir la figure suivante), faites un clic gauche sur l'icône de WAMP dans la barre des tâches, puis allez dans le menu PHP / Extensions PHP et vérifiez que php_pdo_mysql est bien coché.

Vérifiez que l'extension PDO est activée


Et si je n'utilise pas WAMP ?



Vous pouvez ouvrir le fichier de configuration de PHP (qui s'appelle généralement php.ini) et rechercher la ligne qui contient php_pdo_mysql (à la ligne 3 dans l'exemple ci-dessous). Enlevez le point-virgule devant s'il y en a un pour activer l'extension :

Php.ini 

1

2

3

4

5

;extension=php_pdo_firebird.dll

;extension=php_pdo_mssql.dll

extension=php_pdo_mysql.dll

;extension=php_pdo_oci.dll

;extension=php_pdo_odbc.dll



Si vous êtes sous Linux et que vous utilisez XAMPP, recherchez la ligne qui commence par pdo_mysql.default_socket et complétez-la comme ceci :

Code : PHP 

1

pdo_mysql.default_socket = /opt/lampp/var/mysql/mysql.sock



Enregistrez le fichier puis redémarrez PHP. Il suffit pour cela de relancer votre logiciel favori (WAMP, MAMP, XAMPP…).


Se connecter à MySQL avec PDO



Maintenant que nous sommes certains que PDO est activé, nous pouvons nous connecter à MySQL. Nous allons avoir besoin de quatre renseignements :

  • le nom de l'hôte : c'est l'adresse de l'ordinateur où MySQL est installé (comme une adresse IP). Le plus souvent, MySQL est installé sur le même ordinateur que PHP : dans ce cas, mettez la valeur localhost (cela signifie « sur le même ordinateur »). Néanmoins, il est possible que votre hébergeur web vous indique une autre valeur à renseigner (qui ressemblerait à ceci : sql.hebergeur.com). Dans ce cas, il faudra modifier cette valeur lorsque vous enverrez votre site sur le Web ;
  • la base : c'est le nom de la base de données à laquelle vous voulez vous connecter. Dans notre cas, la base s'appelle test. Nous l'avons créée avec phpMyAdmin dans le chapitre précédent ;
  • le login : il permet de vous identifier. Renseignez-vous auprès de votre hébergeur pour le connaître. Le plus souvent (chez un hébergeur gratuit), c'est le même login que vous utilisez pour le FTP ;
  • le mot de passe : il y a des chances pour que le mot de passe soit le même que celui que vous utilisez pour accéder au FTP. Renseignez-vous auprès de votre hébergeur.

Pour l'instant, nous faisons des tests sur notre ordinateur à la maison. On dit qu'on travaille « en local ». Par conséquent, le nom de l'hôte sera localhost.
Quant au login et au mot de passe, par défaut le login est root et il n'y a pas de mot de passe.

Voici donc comment on doit faire pour se connecter à MySQL via PDO sur la base test :

Code : PHP 

1

2

3

<?php

$bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '');

?>


Je ne comprends rien à ce code, c'est normal ?



Oui, il faut reconnaître qu'il contient quelques nouveautés. En effet, PDO est ce qu'on appelle une extension orientée objet. C'est une façon de programmer un peu différente des fonctions classiques que l'on a appris à utiliser jusqu'ici.

Nous aurons l'occasion d'en apprendre plus au sujet de la programmation orientée objet (POO) plus tard. Pour l'instant, je vous invite à réutiliser les codes que je vous propose en suivant mes exemples. Vous comprendrez les détails de leur mode de fonctionnement un peu plus tard.



La ligne de code qu'on vient de voir crée ce qu'on appelle un objet $bdd. Ce n'est pas vraiment une variable (même si ça y ressemble fortement) : c'est un objet qui représente la connexion à la base de données. On crée la connexion en indiquant dans l'ordre dans les paramètres :

  • le nom d'hôte (localhost) ;
  • la base de données (test) ;
  • le login (root) ;
  • le mot de passe (ici il n'y a pas de mot de passe, j'ai donc mis une chaîne vide).

Lorsque votre site sera en ligne, vous aurez sûrement un nom d'hôte différent ainsi qu'un login et un mot de passe comme ceci :

Code : PHP 

1

2

3

<?php

$bdd = new PDO('mysql:host=sql.hebergeur.com;dbname=mabase', 'pierre.durand', 's3cr3t');

?>



Il faudra donc penser à changer cette ligne pour l'adapter à votre hébergeur en modifiant les informations en conséquence lorsque vous enverrez votre site sur le web.

Le premier paramètre (qui commence par mysql) s'appelle le DSN : Data Source Name. C'est généralement le seul qui change en fonction du type de base de données auquel on se connecte.




Tester la présence d'erreurs



Si vous avez renseigné les bonnes informations (nom de l'hôte, de la base, le login et le mot de passe), rien ne devrait s'afficher à l'écran. Toutefois, s'il y a une erreur (vous vous êtes trompés de mot de passe ou de nom de base de données, par exemple), PHP risque d'afficher toute la ligne qui pose l'erreur, ce qui inclut le mot de passe !

Vous ne voudrez pas que vos visiteurs puissent voir le mot de passe si une erreur survient lorsque votre site est en ligne. Il est préférable de traiter l'erreur. En cas d'erreur, PDO renvoie ce qu'on appelle une exception qui permet de « capturer » l'erreur. Voici comment je vous propose de faire :

Code : PHP 

 1

 2

 3

 4

 5

 6

 7

 8

 9

10

<?php

try

{

       $bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '');

}

catch (Exception $e)

{

        die('Erreur : ' . $e->getMessage());

}

?>



Voilà encore un code un peu nouveau pour nous. Là encore, sans trop rentrer dans le détail, il faut savoir que PHP essaie d'exécuter les instructions à l'intérieur du bloc try. S'il y a une erreur, il rentre dans le bloc catch et fait ce qu'on lui demande (ici, on arrête l'exécution de la page en affichant un message décrivant l'erreur).

Si au contraire tout se passe bien, PHP poursuit l'exécution du code et ne lit pas ce qu'il y a dans le bloc catch. Votre page PHP ne devrait donc rien afficher pour le moment.

Ouh là ! Tout ça semble bien compliqué, je n'y comprends pas grand-chose ! C'est grave, docteur ?



Non, pas du tout ! En fait, et j'insiste là-dessus, PDO nous fait utiliser des fonctionnalités de PHP que l'on n'a pas étudiées jusqu'à présent (programmation orientée objet, exceptions…). Contentez-vous pour le moment de réutiliser les codes que je vous propose et n'ayez crainte : nous reviendrons sur ces codes-là plus tard pour les expliquer en détail.

Si vous avez une page blanche, vous pouvez continuer. Si vous avez une erreur, lisez le message et essayez de comprendre ce qu'il signifie. Si vous êtes bloqués, n'hésitez pas à demander de l'aide, sinon vous ne pourrez pas aller plus loin.

Créé avec HelpNDoc Personal Edition: Maximisez les capacités de votre fichier d'aide CHM avec HelpNDoc