Il est vrai que lorsqu’on souhaite réaliser de gros projets, on se tourne plutôt vers un CMS, ou un framework du style Symfony, CodeIgniter, etc. Cependant, sur tous vos petits projets nécessitant une base de données (mySQL, Oracle, SQLite, PostgreSQL), ezSQL vous apportera un confort non négligeable ! En effet, quelque soit la base de données que vous utiliserez, le code écrit grâce à ezSQL sera unique.
ezSQL est une classe PHP open source fournissant une couche d’abstraction pour votre base de données. Cette classe est utilisée sur plus de 100 000 sites web, d’après l’auteur, dont de beaux projets tels que WordPress.
Nous allons donc voir dans cet article les différentes fonctionnalités proposées par ezSQL.
Mise en place de ezSQL
Pour installer ezSQL, dézippez l’archive samples.zip
et envoyez le contenu du dossier vers votre serveur. Une fois le transfert effectué, voici le code à ajouter au début de votre fichier PHP :
// Appel de ezSQL core
include_once("ezSQL/shared/ez_sql_core.php");
// Appel du composant de DB ezSQL spécifique
include_once("ezSQL/mysql/ez_sql_mysql.php");
// Initialisation de l’objet DB et connection
$db = new ezSQL_mysql(‘root’,’root’,’testEzSQL’,’localhost’);
[/sourcecode]
Modifiez simplement les différents chemins pour accéder à ez_sql_core.php
et à ez_sql_mysql.php
ainsi que les informations permettant d’accéder à la base de données (utilisateur, mot de passe, nom de la base, serveur).
Exemple de différentes requête SQL
Pour les différents exemples qui vont suivre, j’ai créé la table suivante :
— Structure de la table `bnt`
CREATE TABLE `bnt` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`titre` text NOT NULL,
`categorie` text NOT NULL,
`contenu` text NOT NULL,
`auteur` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
— Contenu de la table `bnt`
INSERT INTO `bnt` VALUES(1, ‘Prise en main de Sencha Touch’, ‘Développement Mobile’, ‘Comme l’article de Yohann le montre, les technologies web mobiles deviennent de plus en plus importantes dans le développement d’applications mobiles. Une application native apporte en effet une excellente expérience utilisateur, cependant, elle nécessite d’apprendre un langage particulier, très souvent différent d’une plateforme mobile à une autre. Déployer une application sur toutes les plateformes a donc un coût important. C’est ce point que viennent corriger les différents Framework Web mobiles dont vous avez déjà peut être entendu parler. Ils s’appellent jQuery Mobile, Sencha Touch, jQTouch, et il y a fort à parier qu’ils vont devenir de plus en plus utilisés.’, ‘Florent’);
INSERT INTO `bnt` VALUES(2, ‘Google Code annonce son support à Git’, ‘Google’, ‘Comme annoncé hier sur le site de webmonkey Google Code a finalement ajouté le support pour le Git, le très populaire système de contrôle de version. Git est un système de contrôle de version distribué, utilisé par de nombreux projets populaires, tels que le noyau Linux, Ruby on Rails et Android.’, ‘Yohann Poiron’);
INSERT INTO `bnt` VALUES(3, ‘Gridless : un framework basé sur l’amélioration progressive’, ‘Développement’, ‘L’amélioration progressive est un concept qui est basé sur l’idée de la séparation du fond et de la forme afin de permettre une simplification de l’affichage du contenu et ainsi rendre accessible à tous les utilisateurs un accès minimum à l’information en améliorant progressivement l’affichage en fonction du périphérique d’affichage de l’internaute.’, ‘Wilfried Soudet’);
[/sourcecode]
Vous retrouverez ce script dans les sources disponibles en téléchargement à la fin de l’article.
Exécution d’une requête
Pour réaliser une requête d’insertion, de modification ou plus généralement, n’importe quelle requête, il suffit d’utiliser la méthode query()
.
$db->query("UPDATE bnt SET auteur = ‘Florent Suc’ WHERE id = 1");
[/sourcecode]
Cette requête aura pour effet de modifier le nom de l’auteur du premier élément.
Sélection d’enregistrements
Dès lors que vous souhaitez récupérer plusieurs enregistrements depuis la base de données, vous pouvez utiliser la méthode get_results()
.
$articles = $db->get_results("SELECT titre, auteur FROM bnt");
foreach ( $articles as $article )
{
// Access data using object syntax
echo $article->titre.’ de ‘;
echo $article->auteur.'<br />’;
}
[/sourcecode]
Il devient alors très facile d’accéder aux différents enregistrements en utilisant la syntaxe de la programmation orientée objet (->
).
Sélection d’un seul enregistrement
Vous aurez peut être besoin de récupérer un seul enregistrement. Vous utiliserez la méthode get_row()
qui vous renverra l’enregistrement correspondant à la requête passée en paramètre.
$art = $db->get_row("SELECT titre FROM bnt WHERE auteur=’Florent Suc’");
echo $art->titre;
[/sourcecode]
Récupération d’une variable
Là où les count(*)
deviennent assez lourd à récupérer avec certaines classes, ezSQL vous fourni une méthode get_var()
permettant de récupérer une variable.
$nbArticles = $db->get_var("SELECT count(*) FROM bnt");
echo $nbArticles.’ articles’;
[/sourcecode]
Sélection d’une colonne
Vous aurez peut être besoin de sélectionner une colonne entière. La méthode get_col()
vous permettra de la récupérer en fonction de son indice.
$articles = $db->get_col("SELECT titre FROM bnt",0);
foreach ( $articles as $article )
{
echo $article;
}
[/sourcecode]
Debugage d’une requête
La fonction de débugage est une fonction très intéressante de ezSQL, puisqu’elle vous permettra d’obtenir de nombreuses informations sur la dernière requête effectuée.
$db->debug();
[/sourcecode]
Voici le résultat d’une requête.
Conclusion
Cette classe pourra donc vous accompagner sur tout vos micro-projets nécessitant une base de données. Personnellement, je trouve que ezSQL apporte un certain confort, notamment avec sa fonction de débugage qui m’aurait bien aidé à de nombreuses reprises 😉
Vous pouvez obtenir cette classe sur le site de l’auteur.
Voici les sources utilisées dans cet article. Elles comportent le script de création de la table BNT
ainsi qu’un script PHP mettant en œuvre les différentes fonctions de ezSQL.
[download id= »5471″]
Que pensez vous des apports de cette classe ? Quelles sont, de manière générale, vos préférences en matière de développement SQL ?