La base de données

Comme son nom l'indique, c'est une base ... de données. Concrètement, ça stocke des informations sous forme de tables (qui sont des tableaux) dans lesquelles on peut sélectionner des informations, les trier ou ajouter une information, etc. Pour cela on utilise des requêtes écrites en langage SQL. Ce langage est un standard et permet de faire des requêtes à différents types de base de données[1]. Clearbricks peut se connecter à trois types de bases de données : MySQL, PostgreSQL (noté aussi PGSQL) et SQLite (très peu utilisé).

La classe dbLayer

dbLayer est le diminutif de database layer, ou couche de la base de données en français. C'est une couche d'abstraction, ce qui signifie qu'on fait appel à dbLayer pour réaliser des actions (ici des requêtes SQL) sans se soucier de ce qu'il y a en-dessous. Au lieu d'utiliser les fonctions de PHP telles que mysql_query() et pg_query() on utilisera les fonctions de dbLayer en faisant abstraction du type de la base de données.

On peut schématiser ainsi le cheminement d'une requête SQL :

dbLayer

Grâce à Clearbricks et dbLayer, on a un code qui gère indifféremment les 2 types de base de données.

La table lecteurs

Imaginons qu'on ait créé une table lecteurs :

lecteurs
idnomrole
1Pierreclown
2Pauldéveloppeur
3Jacquessoutien moral
4Olivierchef
5Kozlikafée

Cette table est un tableau composé de 3 champs (les colonnes) : id (l'identifiant de la ligne) correspondant à l'ordre dans lequel les lecteurs se sont enregistrés, nom (le nom des utilisateurs) et role qui est le rôle de l'utilisateur. Cette table compte 5 enregistrements (les lignes). Elle servira d'exemple dans ce billet.

Admettons que la connexion a la base de données a été effectuée, c'est l'objet $con. Nous allons voir comment utiliser la fonction select().

Première requête sur un enregistrement et un champ

Comment faire pour afficher le nom du premier lecteur ?

Voici la requête en pseudo-code : "sélectionner nom dans la table lecteursid = 1" et en SQL :

$query = 'SELECT nom FROM lecteurs WHERE id = 1;';

Effectuons la requête :

$rs = $con->select($query);

$rs est un recordset, c'est un groupe d'enregistrements (ici un seul) qui contient les champs (ici le champ nom). On accède au champ nom grâce à la fonction field() ou sa version raccourcie f(), on l'affiche ainsi :

echo($rs->f('nom'));

Ceci affichera "Pierre". Notez qu'il existe une syntaxe simplifiée pour afficher le même résultat :

echo($rs->nom);

On peut aussi effectuer la même opération en une ligne :

echo($con->select($query)->nom);

Une requête sur un champ avec plusieurs enregistrements

Comment afficher les noms des derniers lecteurs ?

Voici la requête en pseudo-code : "sélectionner nom dans la table lecteurs en rangeant par id décroissant en se limitant à 2 enregistrements" et en SQL :

$query = 'SELECT nom FROM lecteurs ORDER BY id DESC LIMIT 2;';

Effectuons la requête :

$rs = $con->select($query);

Le recordset $rs contient 2 enregistrements, on ne peut plus accéder directement au champ nom des 2 enregistrements avec f('nom'). On va parcourir les enregistrements avec une boucle grâce à la fonction fetch() :

while ($rs->fetch()) {echo($rs->f('nom').' ');}

Ceci va afficher "Kozlika Olivier".

Une requête sur plusieurs champs de plusieurs enregistrements

Comment afficher les noms et les rôles des 3 premiers lecteurs ?

Voici la requête en pseudo-code : "sélectionner nom et rôle dans la table lecteurs par id croissant en se limitant à 3 enregistrements" et en SQL :

$query = 'SELECT nom,role FROM lecteurs ORDER BY id ASC LIMIT 3;';

Effectuons la requête :

$rs = $con->select($query);

Le recordset $rs contient 3 enregistrements et 2 champs, on va devoir parcourir les enregistrements comme précédemment :

while ($rs->fetch()) {echo($rs->f('nom').' : '.$rs->f('role').' ');}

Ceci va afficher "Pierre : clown Paul : développeur Jacques : soutien moral".

Conclusion

Désormais vous savez utiliser les fonctions de dbLayer pour effectuer des requêtes SQL de type SELECT. Si vous voulez aller plus loin, vous pouvez regarder les autres billets portant le tag "documentation".

Modifications apportées :

  • 20-11-2007
    • suppression de références à Dotclear (ex : $core->con)
    • amélioration de La base de données
    • ajout de rs->nom équivalent à rs->f('nom')
  • 22-11-2007
    • modification du graphique : suppression de traitement et affichage qui n'avaient pas de sens
    • multiples modifications : suppression des imprécisions, etc.

Notes

[1] le langage peut différer d'un type à l'autre