Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

[POO] CLASSE D'ABSTRACTION SQL


Information sur la source

Catégorie :Base de données Classé sous : poo, sql, base, données, php Niveau : Initié Date de création : 28/04/2007 Vu / téléchargé: 5 895 / 286

Note :
7,67 / 10 - par 3 personnes
7,67 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note

Description

Salut,

Ma première source n'était pas terrible du tout, j'espère avoir fait mieux cette fois-ci.
C'est un grand classique, il s'agit d'une classe d'abstraction SQL, permettant de se connecter à un serveur MySQL (classe concrète fournie) ou PostGreSQl (classe concrète en cours d'écriture) ou tout autre pour peu qu'on écrive la classe concrète qui va avec (ce qui ne fait pas grand chose). La classe est écrite en php5 et n'est pas compatible avec php4

J'ai abandonné l'idée de chargement de requêtes via un fichier xml à l'instanciation de la classe, c'est pas tellement utile. Il suffit d'utiliser la méthode prepare() dans une fonction de 5 lignes pour parvenir au même résultat que ce que j'avais déjà fait.

Le package se compose de plusieurs fichiers, dont voici le détail :
- DB.class.php : La classe abstraite
- DB.config.php : La configuration de connexion (nom d'utilisateur, serveur, etc)
- DB.param.php : La configuration de la classe (connexion automatique, classe d'Exception à lancer en cas d'erreur)
- mysql.class.php : La classe concrète pour MySQL

Un bout de code illustre l'utilisation de la classe.
 

Source

  • <?php
  • require('mysql.class.php');
  • try {
  • $db = new MySQL();
  • $db -> query('SELECT config_name, config_value FROM config');
  • $arr = $db -> fetch_assocset();
  • foreach ($arr as $item)
  • {
  • $config[$item['config_name']] = $item['config_value'];
  • }
  • $db -> prepare('exemple', 'SELECT user_id, user_name, password FROM users WHERE user={1} LIMIT 1');
  • $db -> execute('exemple', 'Neigedhiver');
  • $user_data = $db -> fetch_assoc();
  • if ($user_data['password'] != sha1('Mot2Passe'))
  • {
  • throw new Exception('Incorrect_Password');
  • }
  • }
  • catch (Exception $e) {
  • echo $e -> getMessage();
  • echo '<pre>';
  • echo $e -> getTraceAsString();
  • echo '</pre>';
  • }
  • ?>
<?php
	require('mysql.class.php');
	try {
		$db = new MySQL();
		$db -> query('SELECT config_name, config_value FROM config');
		$arr = $db -> fetch_assocset();
		foreach ($arr as $item)
		{
			$config[$item['config_name']] = $item['config_value'];
		}
		$db -> prepare('exemple', 'SELECT user_id, user_name, password FROM users WHERE user={1} LIMIT 1');
		$db -> execute('exemple', 'Neigedhiver');
		$user_data = $db -> fetch_assoc();
		if ($user_data['password'] != sha1('Mot2Passe'))
		{
			throw new Exception('Incorrect_Password');
		}
	}
	catch (Exception $e) {
		echo $e -> getMessage();
		echo '<pre>';
		echo $e -> getTraceAsString();
		echo '</pre>';
	}
?>

Conclusion

La classe peut soit lancer des exceptions de la classe Exception native de php5, soit une classe étendue personnalisée. Cela se paramètre dans le fichier DB.param.php en renseignant le nom de la classe à utiliser.
Il faut donc impérativement (pour que le code soit propre) utiliser une syntaxe avec des blocs try/catch, ou bien utiliser une fonction de de gestion des exception définie par set_exception_handler().

Les fonctions publiques implémentées à l'heure actuelle sont :
- connect()
- disconnect()
- query()
- prepare() : cette méthode simule le comportement de la fonction php pg_prepare spécifique à PostGreSQL. Elle "stocke" une requête pour utilisation ultérieure. S'utilise avec execute()
- execute() : execute une requête stockée avec prepare(). Des paramètres peuvent figurer dans la requête, comme illustré dans le code ci-dessus.
- fetch_row, fetch_array, fetch_assoc : retourent une ligne sous forme respectivement de tableau numérique, numérique et associatifg, associatif.
- fetch_arrowset, fetch_arrayset, fetch_assocset : retournent un tableau numérique contenant le résultat des fonctions précédentes
- num_rows, affected_rows
Il s'agit du minimum vital.

Les variables publiques accessibles sont :
- sql : On peut y stocker une requête. Par défaut, la fonction query() utilise cette variable si aucune requête n'est passée en argument.
- num_queries : nombre de requêtes exécutées par la méthode query() (qui est également appelée par la méthode execute() )
- result : par défaut, les fonctions prenant un résultat en argument utilisent cette variable, qui est automatiquement renseignée par query(). On peut leur passer une autre ressource résultat (facultatif).

Le code est normalement assez clair et documenté pour qu'on comprenne aisément ce qui s'y passe.
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de neigedhiver le 03/05/2007 22:22:40

Salut,

Merci aux personnes qui ont mis une note, c'est sympa.
Cependant, j'accepte aussi les commentaires, histoire de savoir un peu si ma source est correcte, pourrie, utile, complètement superflue, bien écrite ou pas,...

Merci :o)

signaler à un administrateur
Commentaire de Gwinyam le 10/06/2007 16:07:38

Salut,

J'ai pas pris trop le temps de regarder ce que tu as fait, mais cette idée m'intéresse puisque je comptais faire pareil sous peu pour un développement perso. Donc là ça m'arrange, forcément ;)

Juste une petite question, la classe concrète de PostGreSQL, tu penses l'avoir terminée quand? Juste pour avoir un ordre d'idée...

Sinon ben je teste ça et je reviendrais commenter ;)

signaler à un administrateur
Commentaire de amezghal le 25/08/2007 13:47:58

vas y mis à jour la source
ya encore postgreSQL et surtous les itérateurs
script propre, gestion des exceptions impec
bravo :)

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Récupérer données d'une base sql [ par Billybobbonnet ] Bonjour,Je suis débutant en php/sql et je ne sais pas comment récupérer les valeurs d'une ligne de table SQL dans des variables. Voilà la commande qui Formulaire complexe avec connexion php/mysql [ par baxhax ] bonjour les amis Salut, je suis dans l'impasse, je suis débutant dans php et je dois faire un projet de recherche pour créer une base de données ave Cr&ation de Base de Données [ par JLB59 ] A tous ceux qui ont essayés de m'aider à résoudre mon problème, je les en remercie.Voilà ce que j'ai trouvé :&lt;?php$link = mysql_connect('localhost' communication entre php et excel [ par developinform ] Bonjour; Je veux importer des données d'une feuille Excel a une base de données sous Mysql (en utilisant le php ou non). Alors est ce que c' En PHP, créer une base de données simples [ par JLB59 ] Bonjour à tous,Voilà, j'utilise EasyPHP et je voulais savoir s'il est possible de créer une base et une table .sql à partir de PHP.Vous allez me dire mettre les données du SQL dans une page PHP [ par djteuf ] Bonjour a tousJ'aimerais avoir toutes les infos dans une page PHP de qui sont réaliser avec cette structure que j'ai en image plus bas.C'est simplemen Pb base de données sql php [ par maxxou56 ] Je souhaiterais réalisé une page php a partir dune base de données Voici mes deux tables:ARTISTE (nom_artiste, image_artiste, type_musique, nationalit Redirect PHP [ par Stephane0000 ] Bonjour,Mon projet se compose de trois pages en php. Sur la première page j'ai un formulaire dont les données sont traitées sur la seconde page (les d base de données [ par astuces_jeux ] bonjour,je suis un utilisateur d'ifrance et ont fait ma base de données pour moi,j'ai créer une base de donnée avec phpmyadmin : SQL.inscriptionjai un connection entre page php et la Base de données [ par selma2ce ] svp aider moi ; je veux faire la connection à ma base de donnée. j'ai fait un site web (de débutant) et à la page commande j'ai fait un formulaire à r


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,905 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.