PHP offre un nombre de fonctions impressionnantes permettant aux
scripts de récupérer des données à partir de quantité de SGBD
différents. En natif, PHP gère les drivers pour accéder aux SGBD
PostgreSQL, dBase, mSQL, mySQL, Oracle, FilePro, Informix, Sybase, InterBase ainsi que tous les SGBD supportant les accès via ODBC (Open DataBase Connectivity).
Nous
n’allons pas décrire l’ensemble de ces fonctions, mais uniquement
celles qui sont nécessaires pour une utilisation “ classique ”.
Nous allons nous baser ici sur une connexion à un SGBD distant de type mySQL avec une interrogation de la base en SQL.
11.1 Ouverture d’une base
Il existe essentiellement deux fonctions permettant l’accès à une base. La première, mysql_connect permet de se connecter au SGBD, la seconde mysql_select permet de sélectionner une base.
Exemple
<?
$bdd= "mabase"; // Base de données
$host= "sql.iutbayonne.univ-pau.fr";
$user= "roose"; // Utilisateur
$pass= "12345";
mysql_connect($host,$user,$pass) or die ("Impossible de se connecter à la base de données");
mysql_select_db($bdd);
?>
L’exemple précédent va permettre de se connecter sur le SGBD mySQL situé à l’adresse sql.iutbayonne.univ-pau.fr, avec une identification personnelle.
Bien évidemment, comme à l’accoutumé, lorsqu’on ouvre quelque chose en informatique, on le referme.
On n’oubliera pas donc de fermer l’accès à la BD lorsque l’on en aura terminé avec elle, avec msql_close( ).
11.2 Requêtes SQL
Une
fois la base de données ouverte, il est possible de l’interroger en
langage SQL classique. Pour cela, il est nécessaire de lui transmettre
la requête à l’aide de la fonction : msql_query dont voici un exemple d’utilisation :
$query = "SELECT num, pays, date, circuit FROM $nomtable "; //$nomtable contient le nom de la table.
$result= mysql_query($query);
Bien qu’ici la requête est mise dans une variable, il est tout à fait possible de l’inclure directement dans la commande
mysql_query.Généralement après chaque requête, on teste si tout c’est bien passé. Pour cela, on appelle la fonction
mysql_error qui récupère le dernier message d’erreur retourné par une fonction
mySQL.
if (mysql_error()){ // Erreur base de données, sûrement la table qu'il faut créer print "Erreur dans la base de données : ".mysql_error(); // On concatène et on affiche l’erreur produite. exit(); } |
11.3 Récupération de données
La fonction mysql_fetch_row( )
retourne un tableau qui représente tous les champs d’une rangée de
résultat (un tuple). Chaque appel produit le tuple jusqu’à ce qu’il n’y
en ait plus.
Il existe d’autres fonctions pour réaliser cela, mais
celle-ci est la plus rapide pour obtenir des résultats à partir d’une
requête.
while ($row=mysql_fetch_row($result)) // $result a été obtenu par le msql_query précédent.
{
// récupération des informations
$num = $row[0];
$pays = $row[1];
$date = $row[2];
$circuit = $row[3];
‘’ … ‘’ ;
}
A noter qu'au lieu d'utiliser les indices 0, 1, ... il est possible de donner le nom du champ ($row['pays']) à la condition d'utiliser mysql_fetch_array() en lieu et place de mysql_fetch_row().
11.4 Autres fonctions
mysql_list_db ( ) retourne un tableau contenant les noms des bases disponibles. C'est le pendant de SHOW DATABASES en SQL.
mysql_list_tables( ) réalise la même chose que précédemment, mais pour les tables. C'est le pendant de SHOW TABLES en SQL.
mysql_num_rows( ) retourne le nombre de lignes d'un résultat obtenu par une requête.
11.5 Utilisation d’ODBC
Afin de communiquer avec divers SGBD, un logiciel client utilise une API (Application Programming Interface)
appelée ODBC. Ces API sont généralement écrites par les éditeurs de
SGBD eux mêmes. Il est ainsi possible à partir d’un même programme
d’accéder à différents SGBD à partir du moment où l’on
possède les drivers de son API.
ODBC utilise le langage SQL supporté par la quasi totalité des SGBD, et particulièrement, les SGBD relationnels.
Nous n’allons pas décrire l’utilisation des fonctions ODBC puisqu’elles s’utilisent de manière identique à celles décrites précédemment pour mySQL.