Abstraction SQL en PHP

Voici une petite classe PHP permettant d'abstraire un peu plus l'accès aux données via l'utilisation de PDO tout en rendant son utilisation plus simple. 

Cette classe à l'avantage de gérer une sorte de singleton via la session de l'utilisateur. Elle est aussi multi-bases grâce au fichier de configuration. Le code à écrire ressemble beaucoup à ce qu'on pouvais trouver sur l'ancienne bibliothèque "mysql_*" aujourd'hui remplacée par PDO, grâce au masquage du statement SQL.


Voici le fichier de configuration "config.sql.php"




<?
 /**  
  * Fichier de configuration des bases SQL utilisées dans le projet.  
  */  
 $i=0;  
 $SQL[$i]['HOST'] = "host.domain.tld";  
 $SQL[$i]['USER'] = "";        // Laisser vide si le server Apache tourne sur  
 $SQL[$i]['PASS'] = "";        // un compte NT qui peut se connecter au serveur SQL !  
 $SQL[$i]['BASE'] = "database";  
 $SQL[$i]['DSN']  = "sqlsrv:Server=".$SQL[0]['HOST'].";Database=".$SQL[0]['BASE'];  
 $SQL[$i]['SET'][0] = "DATEFORMAT ymd";  
 $i++;  
 $SQL[$i]['HOST'] = "host2.domain.tld";  
 $SQL[$i]['USER'] = "user";  
 $SQL[$i]['PASS'] = "pass";  
 $SQL[$i]['BASE'] = "database2";  
 $SQL[$i]['DSN']  = "mysql:host=".$SQL[0]['HOST'].";dbname=".$SQL[0]['BASE']; 
?>

Et voici à quoi ressemble un appel sur la classe :
<?php
$db = new AbstractDB();
$db->query("SELECT * FROM TABLE");
while ($r=$db->fetch()) echo $r['FIELD1']."<br />";
unset($db);
?>

Avec bien sûr la table "TABLE" contenant un champ "FIELD1".

On peut utiliser la seconde base de données (celle en MySQL) comme ceci :


<?php
$db = new AbstractDB(1);
$db->query("SELECT * FROM TMY");
while ($r=$db->fetch()) echo $r['FLDMY1']."<br />";
unset($db);
?>

La classe dispose de méthode permettant de gérer le stripslashes en fonction du type de serveur SQL utilisé. Je ne garanti par que ça fonctionne toujours mais en tout cas pour les bases MySQL et SQL Server j'ai le résultat que je souhaite.


<?php
$item = $db->stripSlashes($r['FIELD1']);
?>

Enfin j'y ai ajouté une méthode statique "ary2where" permettant de transformer un tableau en une condition SQL ce qui permet de gérer des condition lors de la construction de la requête sans se préoccuper de où placer le WHERE :

<?php
$i=0;
$sql = "SELECT * FROM table ";
if ($toto >  0) $cond[$i++] = " FIELD2>30 ";
if ($toto == 1) $cond[$i++] = " FIELD1=='toto' ";

$sql .= AbstractDB::ary2where($cond);
?>

Voilà !

Sentez vous libre de la faire évoluer selon votre projet et vos envies !

Posts les plus consultés de ce blog

Vidange - Laguna III Coupé 2.0 DCI 150

RFID RC522 on Raspberry PI with NodeJS