Php permet un interfaçage très simple avec un grand nombre de bases
de données. Lorsqu'une base de données n'est pas directement supportée
par Php, il est possible d'utiliser un driver ODBC, pilote
standard pour communiquer avec les bases de données.
La communication avec les bases de données se fait à l'aide de requêtes
SQL, un langage de quatrième génération reconnu par l'ensemble des SGBD.
Dans les exemples ci-dessous, le système de gestion de bases de données utilisé est MySQL,
un SGBD gratuit et rapide fonctionnant (entre autres) sous Linux. Etant donné que la majorité des serveurs
Web (dont le fameux serveur Apache) fonctionnent sous Linux, MySQL est de ce fait le SGBD le plus utilisé avec Php.
La première étape consiste à déclarer les variables qui vont
permettre la connexion à la base de données (ce sont les paramètres
des fonctions de connexion à la base). Ces variables sont:
- $user : Le nom d'utilisateur
- $passwd : Le mot de passe
- $host : L'hôte (ordinateur sur lequel le SGBD est installé)
- $bdd : Le nom de la base de données
|
Rappel: Les variables ne sont pas visibles par vos visiteurs étant donné que le
script (portant l'extension .php3) est systématiquement interprété
par le serveur Web
|
Ces variables sont en fait des paramètres de la fonction permettant la connexion
à la base de données. Il est donc possible de passer les valeurs de ces variables
directement dans chaque fonction permettant la connexion, mais cela devient vite gênant
lors d'un changement de mot de passe par exemple. Le comble de l'élégance voudrait
que l'on stocke ces valeurs dans un fichier à part, afin de changer les valeurs dans tous
les fichiers y faisant référence en une seule fois.
Php fournit un grand choix de fonctions permettant de manipuler les bases de données.
Toutefois, parmi celles-ci quatre fonctions sont essentielles:
- La fonction de connexion au serveur
- La fonction de choix de la base de données
- La fonction de requête
- La fonction de déconnexion
Avec le SGBD MySQL, ces fonctions sont les suivantes:
- mysql_connect
- mysql_select_db
- mysql_query
- mysql_close
Certaines de ces fonctions renvoient une valeur permettant de connaître l'état
de la connexion, ainsi il est possible d'interrompre le script afin d'éviter
les erreurs en cascade. Deux méthodes permettent d'effectuer cette opération:
- Le stockage du résultat de l'exécution de la fonction dans une variable. Par exemple:
$connect = mysql_connect($host,$user,$passwd);
- L'utilisation de la fonction die() en cas d'erreur d'exécution. Si la fonction retourne
la valeur 0 (c'est-à-dire s'il y a une erreur) la fonction die() (traduisez meurt)
renvoie un message d'erreur.
Par exemple:
mysql_connect($host,$user,$passwd)
or die("erreur de connexion au serveur $host");
Lorsque l'on effectue une requête de sélection de tuples
à l'aide de la fonction mysql_query, il
est essentiel de stocker le résultat de la requête (les enregistrements) dans une variable,
que l'on nomme généralement $result.
Toutefois, cette variable contient l'ensemble des enregistrements et n'est donc pas exploitable
telle quelle. Ainsi on utilise la fonction mysql_fetch_row(), qui découpe les
lignes de résultat en colonnes (par exemple Nom,adresse,...) et les affecte à
une variable tableau dans l'ordre où elles arrivent.
Ainsi, imaginons une table appelée liens contenant le nom et l'URL de sites
internet. Il est possible de récupérer l'ensemble des enregistrements et de les
afficher dans un tableau:
<html>
<head>
<title>Liens</title>
<head>
<body>
<table border="1" cellpadding="0" cellspacing="0">
<tr>
<th>Nom du site</th>
<th>URL</th>
</tr>
<?php
// Déclaration des paramètres de connexion
$host = la_machine;
// Généralement la machine est localhost
// c'est-a-dire la machine sur laquelle le script est hébergé
$user = votre_login;
$bdd = Nom_de_la_base_de_donnees;
$passwd = Mot_de_passe;
// Connexion au serveur
mysql_connect($host, $user,$passwd) or die("erreur de connexion au serveur");
mysql_select_db($bdd) or die("erreur de connexion a la base de donnees");
// Creation et envoi de la requete
$query = "SELECT nom,url FROM sites ORDER BY nom";
$result = mysql_query($query);
// Recuperation des resultats
while($row = mysql_fetch_row($result)){
$Nom = $row[0];
$Url = $row[1];
echo "<tr>\n
<td><a href=\"$Url\">$Nom</a></td>\n
<td>$Url</td>\n
</tr>\n";
}
// Deconnexion de la base de donnees
mysql_close();
?>
</tr>
</table>
</body>
</html>
Dans l'exemple ci-dessus, les requête retourne les champs nom et url.
La fonction mysql_fetch_row() analyse donc chaque ligne de résultat de
la requête et stocke les colonnes dans le tableau row[]. Ainsi, le champ nom
sera stocké dans row[0] et url dans row[1]. D'autre part, on inclue
généralement mysql_fetch_row() dans une boucle while de telle façon
à ce que l'ensemble des lignes de résultat soient traitées. Lorsqu'il n'y a plus
de ligne à traiter, la boucle while se termine et l'interpréteur exécute la suite des instructions.
Il peut être utile, avant d'insérer des données dans une table, de
détecter la présence d'un enregistrement dans une table, afin d'éviter
de stocker des doublons. Cela peut se faire en effectuant une requête SQL avec
un ordre SELECT et une clause WHERE permettant de vérifier la présence ou non
d'enregistrements correspondant à la requête. La non présence de résultat
se traduit par un retour nul de la part de la fonction mysql_fetch_row(). Voici un exemple
affichant le résultat d'une requête le cas échéant, et dans le cas contraire
une phrase exmpliquant qu'aucun enregistrement correspondant n'a été trouvé
(le code HTML dans lequel le code PHP doit être implanté a volontairement été omis):
<?php
// Déclaration des paramètres de connexion
$host = la_machine;
// Généralement la machine est localhost
// c'est-a-dire la machine sur laquelle le script est hébergé
$user = votre_login;
$bdd = Nom_de_la_base_de_donnees;
$passwd = Mot_de_passe;
// Connexion au serveur
mysql_connect($host, $user,$passwd) or die("erreur de connexion au serveur");
mysql_select_db($bdd) or die("erreur de connexion a la base de donnees");
// Creation et envoi de la requete
$query = "SELECT nom,url FROM sites ORDER BY nom";
$result = mysql_query($query);
// Recuperation des resultats
if (!mysql_fetch_row($result)) {
echo "Aucun enregitrement ne correspond\n";
}
else {
while($row = mysql_fetch_row($result)){
$Nom = $row[0];
$Url = $row[1];
echo "<tr>\n
<td><a href=\"$Url\">$Nom</a></td>\n
<td>$Url</td>\n
</tr>\n";
}
}
// Deconnexion de la base de donnees
mysql_close();
?>
|