[poo] - classe d'accès bdd multi sgbd

Soyez le premier à donner votre avis sur cette source.

Vue 8 282 fois - Téléchargée 731 fois

Description

Salut a tous !

Tout d'abord le titre parle de lui même, en fait il s'agit d'une classe, qui permet un accès uniforme à la BDD quelque soit le SGBD derrière (Oracle,SQlLite, Mysql...).

L'intérête d'une tel source est de développer indépendament du SGBD, et lors d'une migration vous n'aurez qu'un paramètre à changer pour indiquez que vous avez changé de SGBD (plutot que toute une source à revoir). Et même si des librairies existent (je l'ai appris grâce aux commentaires), ceci est plutot un exercice de style.

Source / Exemple :


/*
    IN THE ZIP FILE

  • /

Conclusion :


Je pense rajouter plus tard :
- Un gestion de cache
- Un accès a la structure des base de données
- Une correction des requêtes (certaines passent sous MySQl ne passent pas sous Oracle)

J'ai aussi besoin de vous ! Je voudrais des avis constructifs sur cette classe, ainsi que des techniques d'optimisations. Si vous avez des exmples déja fait je suis preneur.

Merci beaucoup
TheWeasel47

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

BAMOS14
Messages postés
1
Date d'inscription
lundi 17 mars 2008
Statut
Membre
Dernière intervention
19 février 2009
-
Salut je vous de votre super travail .Et d'ailleurs pourquoi ja voudrai que vous m'assister dans mon projet transversal java-uml.Comment pourrai-je communiquer avec vous
TheWeasel47
Messages postés
40
Date d'inscription
mercredi 19 mars 2008
Statut
Membre
Dernière intervention
25 août 2009
-
Salut !

Bon Merci pour le explications. Pour la gestion des exeptions en fait je ne savais pas ! C'est ma première gestion :D, je vais donc corriger ça.

Pour ce qui est du @, je suis d'accord avec toi, je ne suis pas fan de ce genre de programmation, toutefois ça affiche des erreurs alors que je prefererai les traiter avec Exeptions.
typiquement :Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'root2'@'localhost' (using password: NO) in D:\wamp\www\BDD\Rs\Class_BddMySQL.php on line 31

Par contre je ne vois pas l'intéret d'utiliser des SPL. Je viens de regarder (rapidement) ce que c'est. Bref je le verrai surement en analysant vos sources.

Merci pour toutes ces techniques !
Cordialement
TheWeasel47
codefalse
Messages postés
1127
Date d'inscription
mardi 8 janvier 2002
Statut
Modérateur
Dernière intervention
21 avril 2009
1 -
Bon, si l'on reste sur le code tel qu'il est proposé, il y a plein de points à revoir, par l'auteur, et par les "commentateurs" :

faire un
try {
$object->function_that_throw_sth ();
}
catch (Exception $oE) {
throw new Exception ($oE->getMessage ());
}

Ca ne sert à rien, à part éventuellement changer le type d'exception (si à l'origine, l'exception lancée n'est pas de type Exception mais une fille étendant la classe Exception). Si c'est une exception, tu ne la catch pas : tant qu'elle sera pas catchée, elle remontera dans les fonctions. En fait, ce que tu fait là avec ton code, php l'aurait fait sans ton try/catch.

@Garfield: "le @ qui n'est la que pour masquer l'incompétence d'un développeur.". Je suis pas d'accord avec toi. Je suis tout à fait d'accord sur le fait que mettre le @ cache la misère, et est la méthode de facilité pour le développeur, mais masquer l'incompétence d'un développeur, non.
Un exemple de pourquoi, la fonction "parse_url".
Elle te retourne un tableau de tous les éléments d'une url (le schéma (ex: http), l'utilisateur, le mot de passe, le serveur, le port, le path, le query, etc (exemple, dans l'ordre : http://user:pass@serveur:80/path?query). Si celui qui donne l'url, retourne une url mal formée (dans notre cas, si tu te connecte à ta base de donnée en fournissant un dsn de la forme url (mysql://root:pass@localhost:3306/dbname), et que cette url est mauvaise, la fonction va génerer une erreur de type e_warning. Tu ne l'as pas forcément voulue, et tu ne peux rien faire pour l'éviter. Le @ (ou modifier le error_reporting) semble être la seule façon de ne pas afficher l'erreur. Bien sur il faudra tester le retour par la suite, savoir si la fonction à bien fait son travail ou pas.

Dans tes classes, il manque un gros point (entre autres), c'est l'usage de la SPL. Elle va te permettre de faire des itérations (dans ton cas) pour retourner une liste de résultats de tes requêtes.

Je ne peux que te conseiller d'aller voir les couches d'abstractions faites par certains membres de CS, tel que FhX, Malalam, moi et probablement d'autres. Regarde comment c'est fait, regarde la structure, les différents usages, et tu verra la complexité du truc :)

Bien sûr, comme je le dis tout le temps, utilisez PDO !!
C'est à peine plus lent que mysql_query (de quasiment rien, donc négligeable), et ca vous permet d'avoir une architecture modulaire, qui vous permettra d'utiliser du mysql comme du oracle, et avec un ensemble de classes bien faites, votre application sera complètement adaptée, rien qu'en changeant le dsn de connection !

Bon courage pour la suite :)
TheWeasel47
Messages postés
40
Date d'inscription
mercredi 19 mars 2008
Statut
Membre
Dernière intervention
25 août 2009
-
Yes !
Ok bah merci pour tous ces commentaires qui touchent sur une piste. Effectivement c'est surtout un exercice de style et puis sa permet d'avoir divers avis ! C'est loin d'etre inutile :D.

En tout cas si vous voyez sur le plan des sources la possibilité d'optimiser, d'améliorer. Je vais mettre vos technique en oeuvre en tous cas !

Merci beaucoup !
TheWeasel47
webdeb
Messages postés
509
Date d'inscription
samedi 5 avril 2003
Statut
Membre
Dernière intervention
31 mars 2009
2 -
@Delphiprog : c'est bien pour cette raison que l'on mentionne que les derniers projets d'ORM du moment s'appuient sur PDO. D'autre part, il ne faut pas non plus dire que PDO est une couche d'abstraction de base de données. Ce n'en est pas véritablement une puisque les requêtes SQL écrites dépendent toujours du SGBDR avec lequel on s'interface via PDO. PDO est donc à mon sens principalement un connecteur commun pour un bon nombre de SGBDR du marché plus qu'une véritable couche d'abstraction de bases de données.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.