Une classe PHP pour faciliter les accès à la base de données
Voici une classe que je trimbale depuis plusieurs années. J'ai décidé de prendre la peine d'écrire un article sur son utilisation parce que je l'utilise dans une série de vidéos qui seront bientôt disponibles sur Developpeur-africain.org.
Cette classe est destinée à ceux qui n'emploient pas une librairie objet-relationnelle telle que doctrine (www.doctrine-project.org) ou PHP-ORM (http://code.google.com/p/php-orm/). Bien que j'encourage fortement l'utilisation de telles libraires, je pense que pour les petits sites de quelques pages, il est parfois plus simple d'avoir recours aux bonnes vieilles méthodes de la vieille école. Mais sans trop de détours rentrons donc dans le vif du sujet.
Les tâches d'insertion, de sélection, de mise à jour et de suppression sont non seulement répétitive, mais elles consomment également un temps considérable lors du développement d'applications Web. Nous passons donc beaucoup de temps à écrire des requêtes SQL de manipulation de donneées alias DML (Data Manipulation Language).
Ci-dessous nous définissons une classe nommée "database" qui contient quatres fonctions: insert, select, update, delete.
Insertion de données
<?php class database { function select ($requete) { throw new Exception($erreur) ; } # nettoyage foreach ($ligne as $clef => $valeur) { } } $donnees[] = $ligne ; } return $donnees ; } function update ($table, $colonnes, $conditions) { foreach($colonnes as $colonne => $valeur) { } $colonnes_[] = "$colonne = $valeur" ; } foreach($conditions as $condition => $valeur) { } $conditions_[] = "$condition = $valeur" ; } $sql = "UPDATE $table SET " ; if (!$resultat) { throw new Exception($erreur) ; } return true ; } function delete ($table, $conditions) { foreach($conditions as $condition => $valeur) { } $conditions_[] = "$condition = $valeur" ; } if (!$resultat) { throw new Exception($erreur) ; } return true ; } function insert ($table, $valeurs) { foreach($valeurs_ as $clef => $valeur) { } $valeurs_[$clef] = $valeur ; } $sql = "INSERT INTO $table (" ; $sql .= ') VALUES (' ; $sql .= ')' ; if (!$resultat) { throw new Exception($erreur) ; } return true ; } } ?>
Note: Toutes les valeurs non numériques sont envoyées à la fonction mysql_real_escape_string() dans le but de protéger les caractères spéciaux d'une commande SQL... C'est donc une défense contre les attaques par injection SQL.
En bonus, voici une exemple d'utilisation de la classe...
Exemple d'utilisation
try { $db = new database ; // Insertion du texte Hello World et de la date courante dans les colonnes // message et date de la table nommée testing 'texte' => 'Hello World", ) ; $db->insert('testing', $donnees) ; // Modification du message de la ligne ayant 5 comme id $donnees = array ( 'texte' => 'Hello World from Devafrique" ) ; $db->update('testing', $donnees, array('id' => 5)) ; // Suppression de la ligne ayant 8 comme id $db->delete('testing', array('id' => 8)) ; // Selectionner toutes les lignes $lignes = $db->select('SELECT * FROM testing') ; foreach($lignes as $ligne) { print "Texte: {$ligne['texte']} ; } } catch(Exception $e) { }
J'espère que cette classe vous sera bien utile :)