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 faisait pas ça, tout le monde pourrait accéder à votre BDD et lire les informations qu'elle contient (parfois confidentielles !).
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 ajouter ou supprimer des éléments à PHP très facilement, 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...).
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, 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é.
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. Enlevez le point-virgule devant s'il y en a un pour activer l'extension :
Code : Autre1
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
pdo_mysql.default_socket et complétez-la comme ceci
Code : Autre1
| 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, type 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 4 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 (qui signifie "sur le même ordinateur"). Néanmoins, il est possible que votre hébergeur web vous indique une autre valeur à renseigner (par exemple 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 | <?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 loin dans le cours. 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 | <?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 d'hôte, base, login, mot de passe), rien ne devrait s'afficher à l'écran. Toutefois, s'il y a une erreur (vous vous êtes trompé 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 | <?php
try
{
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '', $pdo_options);
}
catch (Exception $e)
{
die('Erreur : ' . $e->getMessage());
}
?>
|
Voilà encore un code un peu nouveau pour nous. Je ne vais pas rentrer dans le détail, car nous aurons l'occasion de parler de tout cela plus tard.
Néanmoins, je me doute que vous voudriez savoir comment ce code fonctionne au moins dans les grandes lignes. Voici le principe : PHP exécute les instructions à l'intérieur du bloc
try{ }
. Si une erreur se produit, il s'arrête et "saute" directement au niveau du
catch{ }
pour savoir quoi faire. Ici, on choisit d'afficher l'erreur et d'arrêter le script si on arrive dans le bloc catch.
Si au contraire tout se passe bien, PHP continue 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.
Enfin, vous noterez qu'on crée un array
$pdo_options
que l'on envoie en paramètre sur la ligne suivante. L'objectif de cette manipulation est d'activer les exceptions PDO. Grâce à ce petit ajout (que je vous recommande d'effectuer systématiquement), nous pourrons récupérer les erreurs lorsqu'elles se produisent.
Oulah ! Tout ceci 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 dans le 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é, n'hésitez pas à demander de l'aide sur
les forums sinon vous ne pourrez pas aller plus loin.
Ce que vous devez retenir : utilisez ce modèle de blocs try/catch pour récupérer les erreurs relatives à la base de données, renvoyées par PDO. Cela vous permettra d'avoir un message clair (bon d'accord, en anglais) qui vous permettra de comprendre vos erreurs.