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
19 févr. 2009 à 18:16
12 févr. 2009 à 14:44
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
12 févr. 2009 à 09:35
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 :)
11 févr. 2009 à 14:26
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
10 févr. 2009 à 23:47
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.