Ayant actuellement un projet en cours mettant en oeuvre une base de données mySQL avec PHP et n’ayant pas trouvé de classe d’abstraction qui me plait car souvent trop complète pour ce que j’ai à faire, j’ai décidé d’en créer une et de la distribuer sous licence libre. Je me suis inspiré d’ActiveRecord de Ruby on Rails. C’est vraiment bien plus basique, on est loin d’avoir autant de possibilités qu’avec ActiveRecord mais d’un autre coté, c’est simple et ça fait juste ce dont j’ai besoin.
De quelle configuration ai-je besoin ?
Utilisant la programmation objet et la version 4 de PHP n’étant pas assez complète à ce niveau, j’ai réalisé du code en PHP 5 pour cette bibliothèque. Il vous faut aussi une base de données, ici j’utilise mySQL en accès direct par les fonctions de PHP, je n’ai pas utilisé de couche d’abstraction d’accès à la base mais rien ne vous empêche de le réaliser en utilisant PDO par exemple et de me faire parvenir votre réalisation pour la diffuser ici : Cette bibliothèque est sous licence libre GPL.
Comment ça marche ? Un rapide aperçu.
Le principe est des plus simples : j’ai créé une classe Database servant de parent à tous mes futurs objets en sachant que chaque objet sera associé à une table.
Commencez donc par la création de vos tables en respectant ces quelques règles :
- Bien que ce ne soit pas obligatoire, j’aime bien nommer mes tables en utilisant des mots qui décrivent bien leur contenu, sans majuscule et en séparant les mots par des tirets ( _ )
- Les tables doivent avoir un champ « id » unique. Il peut être en autoincrement et il doit être un clé primaire.
Puis créez un fichier php déclarant un objet (dérivé de Database) pour chacune de vos tables, sur ce modèle :
class MaTable extends Database { function __construct($connexion, $table_name) { parent::__construct($connexion, $table_name); } }
Comment la mettre en place
Là encore rien n’est figé, il vous suffit d’inclure le fichier database.php à votre application et de créer autant d’objets que vous avez de tables :
include 'database.php'; include 'ma_table.php';$connexion = mysql_connect(DB_SERVER, DB_USER, DB_PASSWORD); ma_table = new MaTable($connexion, 'ma_table');
Le constructeur de l’objet à besoin de deux paramètres : la connexion à la base de données et le nom de la table.
Pour simplifier tout ça, j’ai décidé de regrouper tous mes modèles (fichiers des objets correspondants aux tables, c’est le M de MVC) dans un seul répertoire et de créer une fonction d’initialisation (indépendante de la classe Database) qui s’occupe de créer les objets toute seule, cette fonction s’appelle models_initialize et elle prend en paramètre le chemin du répertoire où se trouvent les modèles. Cette fonction est disponible dans ce fichier : models.zip. Vous devrez modifier son fonctionnement pour le faire correspondre à vos besoinsmais l’essentiel y est (parcours du répertoire et création des objets)
Il vous suffit donc de créer un répertoire modeles par exemple, d’y mettre tous vos fichiers modèles (ma_table.php dans notre exemple) et la fonction « models_initialize » s’occupera de créer les variables globales suivantes :
- $DBCon et $DBBase : variables de connexion à la base mySQL.
- un objet pour chaque fichier nommé selon la convention que j’ai choisi : minuscules et tiret pour l’objet, majuscule de la première lettre de chaque mots sans espace pour le nom de la classe. Le nom de l’objet et de la table sont issus du nom du fichier alors faites attention de ne pas vous tromper en nommant vos fichiers.
N’hésitez pas à regarder le code source de cette fonction, il est dans le fichier database.php. C’est ici que vous devrez apporter vos modifications si vous n’utilisez pas la même convention de nommage que moi.
Téléchargement et fin de la première partie
Vous pouvez télécharger le fichier database : Sources Database. Je vous rappelle qu’il est sous licence libre GPL. Important : Maintenant, Database est intégrée au framework PHP Nano vous y trouverez une version bien plus récente mais aussi très différent du point de vue du fonctionnement.
La suite à la rentrée, je vous décrirai la façon d’utiliser les objets créés dans cette première partie. En attendant, passez de bonnes fêtes, et si vous le voulez, vous pouvez jeter un oeil aux méthodes de la classe Database j’ai essayé de les documenter au mieux…
La suite est disponible dans ce billet

16 commentaires ↓
Hmm Voila une classe qui m’intéresse beaucoup. Merci beaucoup. je vais l’utiliser dans mon prochain projet.
Si vous voulez vous pouvez m’envoyer l’adresse du site en question, je créerai un billet regroupant les sites qui utilisent cette classe.
Bonjour,
j’ai une question bête. J’ai l’habitude du php 4 avec des scripts simples auxquels j’envoie mes données par get ou post. Avec une classe, comment tu envoies les données à telle ou telle méthode ?
Dans cette classe j’ai créé une méthode update_attributes et add, il suffit alors d’y passer un tableau contenant tous les champs (ex : array(‘nom_champ’=>valeur, …) ) et si tu crée bien ton formulaire en mettant bien le même nom dans les ‘name’ du formulaire que le nom de tes champs tu récupères un tableau bien construit dans le $_POST qu’il ne te reste plus qu’a passer à la méthode de la classe. Je prépare un billet expliquant tout ça.
Le billet est en ligne : comment utiliser cette classe.
je trouve c’est grace à vous nous nous réuississons tout nos projet de fin de stage mais une une inquietude je veux créer une base de donnée qui va me permettre d’avoir toutes les informations sur un client dejà repectorié
Je ne comprends pas très bien le problème : votre table est déjà créée ? Est-ce qu’elle a des données ? Si ce n’est pas le cas, vous devez commencer par créer votre table pour pouvoir y accéder (voir le second billet)
J’avais déja un système de gestion de base de donnée orienté objet sur mon site mais en découvant la classe Database, j’ai nettement amélioré mon système.
Merci pour ce dev.
Merci Greg, j’en profite pour annoncer que depuis Greg participe au développement du framework Nano. Deux fois merci Greg.
Bonjour j’ai un petit en faite j’ai crée plusieurs bases de données sur la gestion d’une bibliothèque virtuelle notamment membre(login, nom, prenom, tel et email), document, auteur, livre,… et on me dit de crée une classe table2code qui se connecte à ma base de donnée et genère pour une table donnée un formulaire avec les option affichage, insertion, modification, suppression.
salut , veux seulment savoir l’interet de travailler avec les classes ,on peux
faire ca sans les classes n’est pas?
Comment puis-je télécharger ce code ?
Je viens de corriger le lien dans le billet. Il faudra sûrement adapter un peu le code mais l’essentiel y est. Bonne prog.
Salut,
Je vais sûrement utiliser ton package qui à l’air pas mal, mais je ne trouve pas la fonction models_initialize que tu dis être dans database.php.
En effet elle n’y est pas, j’ai modifié le billet maintenant tu peux télécharger le fichier qui la contient : http://www.sbnet.fr/uploads/models.zip Il faudra sûrement l’adapter à tes besoins mais ça pourra te servir de base de départ.
bonjour j’aimerai avoir plus de precision sur le systeme de gestion pure et simple d’une base de données
Laisser un commentaire