TUTORIELS 
Utiliser l'Objet de PHP pour gérer sa base de données

Page 1 | 2

L'Objet permet de définir des méthodes une fois pour toutes et de les utiliser n'importe où. Une solution idéale pour les sites dont plusieurs pages font appel à une base de données.
 (31 janvier 2003)
 

[correction du code le 5 février 2003]

Penchons-nous sur un aspect de PHP qui peut grandement nous simplifier la vie dès qu'il s'agit de gérer des requêtes vers une base SQL: le passage à la "sauce objet" de toutes les requêtes MySQL nécessaires. Cela nous permettra non seulement de centraliser le code dans un seul fichier global, mais aussi de se simplifier grandement la tâche lors de l'écriture de requêtes (et accessoirement, d'ouvrir le développement à des personnes moins "pointues", qui n'auront plus à apprendre SQL pour modifier ou compléter votre code).

L'ensemble de nos requêtes et fonctions se trouveront donc dans un fichier unique, que nous appellerons global.inc.php (global.inc seul est à déconseillé, certains serveurs envoyant ces fichiers en mode texte...).
Nous partons du principe que nous avons créé notre base de données à l'aide de la requête SQL suivante:

CREATE TABLE articles (
  id smallint(5) unsigned NOT NULL auto_increment PRIMARY KEY,
  titre text NOT NULL,
  contenu text NOT NULL,
  auteur varchar(255),
  datepub datetime DEFAULT '0000-00-00 00:00:00' NOT NULL
  );

De même, notre base est supposée être déjà remplie d'au moins un article...

Créons notre fichier global, en y mettant des requêtes de connexion basiques:

(fichier global.inc.php)
<?php
  $db_host = "localhost";
  $db_user = "root";
  $db_pass = "";
  $db_name = "mabase";
  $connexion = mysql_connect($db_host, $db_user, $db_pass) or die (mysql_error());
  $db = mysql_select_db($db_name, $connexion) or die(mysql_error());
?>

L'accès à la base sera ainsi toujours ouvert pour les fichiers PHP faisant appel à notre fichier global. Nous allons maintenant créer notre classe qui nous permettra de gérer notre table:

(fichier global.inc.php, suite)
...

Class article
  {
  var $id;
  var $titre;
  var $contenu;
  var $auteur;
  var $datepub;

Ces variables sont les attributs de notre classe, et ne sont accessibles que depuis celle-çi. Il est nécessaire que l'on y retrouve l'ensemble des champs de notre table.
Nous allons ensuite déclarer un constructeur pour notre classe. Un constructeur est automatiquement appelé quand une occurrence de la classe est créée. Le constructeur est donc une fonction interne de la classe, qui nous permet, à la création, d'initialiser certains de ses attributs. Un constructeur porte obligatoirement le même nom que sa classe:

(fichier global.inc.php, suite)
...

  function article()
    {
    this->id = -1;
    }

Ici, nous ne faisons qu'initialiser l'id de notre instance à "-1", ce qui nous permettra en cours d'execution de tester si sa valeur est négative, donc si notre programme a subit un échec...

Créons maintenant notre méthode de lecture de la base. Elle nous permettra, en fournissant un id, de tirer tous les éléments de la base utilisant cet id:

(fichier global.inc.php, suite)
...

  function lire_article($id)
    {
    $sql = "SELECT id, titre, contenu, auteur, datepub ";
    $sql .= "FROM articles ";
    $sql .= "WHERE id = '$id';";

    $rsql = mysql_query($sql);

    if (mysql_num_rows($rsql) == 0)
      {
      $this->id = -1;
      }
    else
      {
      $this->id = mysql_result($rsql, 0, "id");
      $this->titre = mysql_result($rsql, 0, "titre");
      $this->contenu = mysql_result($rsql, 0, "contenu");
      $this->auteur = mysql_result($rsql, 0, "auteur");
      $this->datepub = mysql_result($rsql, 0, "datepub");
      }
    }

Notre méthode se charge ainsi de récuperer l'article correspondant à l'id que nous lui fournissons, ou de nous envoyer un message d'erreur (ou, littéralement, de renvoyer un résultat avec id = -1) si on n'obtient aucun résultat pour notre requête. Si la requête ne pose aucun problème, notre méthode assignera ses résultats à notre occurrence de la classe article (via la fonction mysql_result(), qui ne renvoie que le champ demandé).

Le code PHP pour récupérer un article sera ainsi extrêmement simple:

(fichier article.php)
<?
include ("./global.inc.php");
...
$monArticle = new article();
$monArticle->lire_article(5);
...
?>
Titre: "<?=$monArticle->titre;?>"<br>
Contenu: "<?=$monArticle->contenu;?>"<br>

On comprend aussi que la tâche est grandement facilitée pour les intégrateurs ne connaissant pas forcément les arcanes de MySQL...

Page 1 | 2

 
[ Xavier Borderie,JDNet
 
Accueil | Haut de page