
Voila une partie intéressante, la connexion avec une base de données. Une base de données est un ensemble structuré et organisé permettant le stockage de grandes quantités d'informations afin d'en faciliter l'exploitation (ajout, mise à jour, recherche de données).
PHP permet un interfaçage avec bon nombre de base de données et lorsque l'une d'entre elle ne l'est pas, il est possible d'utiliser un pilote ODBC (Open DataBase Connectivity) pour palier le problème.
La communication avec une base de données se fait grâce à des requêtes SQL (voir partie SQL).
En règle générale, les fonctions PHP diffèrent selon la base de données utilisée. Il s'agit en fait du " préfixe de la fonction qui change selon la base de données utilisée.
Exemple :
- mysql_connect : base MySQL,
- pg_connect : base PostgreSQL,
- odbc_connect : base Access
C'est la raison pour laquelle cette page parlera uniquement des fonctions propres à MySQL car, il s'agit du SGBD le plus utilisé.
Je ne sais pas si vous avez remarqué mais nous avons là un élément supplémentaire à prendre en compte pour l'interprétation du code. En effet, ce n'est pas PHP qui se charge du traitement des informations mais la base de données. Reprenons le schéma (voir introduction) et ajoutons-y notre base de données MySQL.
- Lorsque l'internaute arrive sur une page PHP. Une requête HTTP est envoyée vers le serveur.
- Le serveur va alors analyser le script PHP.
- La requête SQL est alors envoyé vers le SGBD.
- Le SGBD execute la requête SQL et transmet le résultat au serveur.
- Le serveur créer une page HTML à la volée en se servant de ces nouvelles informations
- Il dispose maintenant d'un contenu HTML...
- ...qu'il va afficher chez l'internaute.
Pour se connecter à une base de données (ici MySQL), nous avons besoin de plusieurs informations :
- l'URL du serveur où se trouve la base de données,
- le nom de l'utilisateur de la base de données,
- le mot de passe de l'utilisateur,
- le nom de la base de données (car il peut en avoir plusieurs)
Exemple
$host="127.0.0.1";
$user="root";
$pass="";
$base="mabase";
Une fois munie de ces données, nous pouvons communiquer avec la base de données.
La fonction mysql_connect() :
La première étape consiste à se connecter à la base de données. La fonction mysql_connect est là pour ça.
Elle comporte trois paramètres de type chaîne correspondant au serveur, à l'utilisateur et au mot de passe.
Exemple :
$connect=mysql_connect($host,$user,$pass) or die("Erreur ! Connexion au serveur impossible.");
Tiens, je place la connexion dans une variable. Pourquoi ? Tout simplement parce que je vais en avoir besoin par la suite, et aussi parce qu'il est possible de se connecter à plusieurs bases de données situées ou non sur plusieurs serveurs.
Il apparait également une nouvelle fonction, la fonction "die()". Cette fonction n'est pas obligatoire mais elle est bien pratique. Son rôle est de tester si la procédure (ici une connexion au serveur) s'est bien déroulée. Elle évite donc d'écrire une structure conditionnelle assez longue et permet un gain de temps d'exécution.
Fonction mysql_select_db() :
Maintenant que nous sommes connectés au serveur il faut choisir la base de données que nous voulons utiliser.C'esr le rôle de la fonction mysql_select_db() qui admet comme paramètre de type chaîne le nom de la base de données.
Exemple :
$db=mysql_select_db($base) or die("Erreur ! Connexion à la base de données impossible.");
Là aussi, nous avons mis la connexion à la base de données dans une variable. Ceci est préférable si nous utilisons plusieurs base de données.
Même si vous n'avez qu'une seule base, prenez l'habitude de mettre la connexion à la base de données dans une variable, cela éviteras des erreurs par la suite.
Fonction mysql_query() :
Nous sommes maintenant prêts à travailler sur la base de données. Si vous regardez l'étape 3 sur le schéma ci-dessus, vous remarquerez qu'une requête SQL est envoyée à la base de données.
C'est indéniable, il est nécessaire d'utiliser le SQL pour communiquer avec la base de données grâce à ce qu'on appelle des requêtes SQL.
La requête se traduit par "query" en anglais. Il est donc logique que la fonction qui envoie la requête s'appelle mysql_query(). Elle prend deux paramètres : la requête de type chaîne et la connexion MySQL (optionnelle). Nous voyons ici l'utilité de mette la connexion dans une variable.
Lorsque la connexion n'est pas précisée, la dernière à être initialisée sera utilisée.
Exemple :
$query="SELECT Nom FROM TPersonne;"
$result=mysql_query($query) or die("Erreur ! Erreur dans la requête.");
Ici, la requête est initialisée dans la variable $query puis elle est exécutée grâce à la fonction mysql_query(). Nous avons encore la fonction die(), toujours aussi pratique !
Fonction mysql_num_rows() :
A l'étape 4, la base de données retourne le résultat de la requête. Il faut maintenant récupérer ces informations. Avant de récupérer les informations, il faut s'assurer que le résultat n'est pas nul. Pour cela, il suffit le nombre de ligne renvoyée grâce à la fonction mysql_num_rows(). Elle prend comme paramètre le résultat de la requête (et la connexion MySQL en option). Si le nombre de ligne renvoyées est égal à 0, c'est qu'il n'y a pas résultat. Il n'est pas obligatoire de réaliser cette vérification si on sait à l'avance s'il y aura un résultat.
Exemple :
if (mysql_num_rows($result)!=0){ ... }
Notez bien que cette fonction ne s'applique que dans le cadre d'une requête de recherche. Pour toutes les autres, il faudra utiliser la fonction msql_affected_rows(). Nous verrons tout ceci en détail dans la partie SQL.
Fonction mysql_fetch_array() :
Il faut maintenant récupérer ces informations. C'est le rôle de la fonction mysql_fetch_array(). Comme son nom l'indique, cette fonction retourne le résultat de la requête dans un tableau.
Ici, une précision s'impose le résultat d'une requête peut comporter plusieurs lignes et mysql_fetch_array() ne lit qu'une seule de ces lignes. Il faut donc initialiser une itération pour récupérer toutes les lignes du résultat.
Exemple :
while ($ligne=mysql_fetch_array($result)){
echo $ligne["Nom"].",";
}
Là encore, je place la ligne de résultat dans une variable pour pouvoir l'afficher. Notez que j'ai mis "Nom" comme indice du tableau comme s'il s'agissait d'un tableau associatif. Il est tout à fait possible d'y mettre seulement 0. Evitez toutefois de mélanger ces deux formes.
Fonction mysql_close() :
Une fois que vous avez terminé les opérations il est important de fermer la connexion au serveur afin d'éviter certaines erreurs et surtout pour libérer les ressources utilisées. C'est le rôle de mysql_close() qui prend comme unique paramètre la connexion au serveur.
Exemple :
mysql_close($connect);
Regroupons maintenant les morceaux de script pour voir ce que ça donne.
Exemple :
<?php
$host="127.0.0.1";
$user="root";
$pass="";
$base="mabase";
$connect=mysql_connect($host,$user,$pass) or die("Erreur ! Connexion au serveur impossible.");
$db=mysql_select_db($base) or die("Erreur ! Connexion à la base de données impossible.");
$query="SELECT Nom FROM TPersonne;"
$result=mysql_query($query) or die("Erreur ! Erreur dans la requête.");
if (mysql_num_rows($result)!=0){
while ($ligne=mysql_fetch_array($result)){
echo $ligne["Nom"].",";
}
}
?>
Résultat >>Laurent, Smith,
Dans l'exemple ci-dessus, j'utilise une base de données MySQL nommé "mabase". Pour des raisons de sécurité évidente, cet exemple est celui de ma connexion locale et non celle du serveur que j'utilise. Lorsque vous placerez votre script sur le serveur en ligne n'oubliez pas de changer les 4 informations au début du script. Ces informations vous seront fournies par votre hébergeur alors conservez bien tous les papiers le concernant.
La liste des fonctions MySQL est assez longue et pour la plupart vous n’en aurez jamais l’utilité. Je vais donc faire le tour des quelques fonctions que vous serez amené à utiliser.
- mysql_affected_rows : prend un seul paramètre optionnel qui est la connexion MySQL. Récupère le nombre de lignes affectées par une insertion, une suppression ou une mise à jour.
- mysql_list_dbs : prend un seul paramètre optionnel qui est la connexion MySQL. Liste les bases de donneés stockées sur le serveur.
- mysql_list_tables : prend deux paramètres, le nom de la base de données et un optionnel qui est la connexion MySQL . Liste les tables d'une base de donneés.
- mysql_list_fields : prend trois paramètres, le nom de la base de données, le nom de la table et un optionnel qui est la connexion MySQL. Liste les champs d'une table.
Dans cette page, nous avons vu beaucoup de mots nouveaux, comme "table" et "champs". Nous en parlerons plus en détail dans la partie SQL.
|