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 !

BASIC MYSQL LAYER


Information sur la source

Catégorie :Class et Objet ( POO ) Classé sous : poo, classe, mysql Niveau : Débutant Date de création : 26/12/2006 Vu / téléchargé: 1 916 / 157

Note :
8 / 10 - par 1 personne
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

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

Description

Salut,

Voici la première source que je publie. Il s'agit d'une classe d'accès (PHP5) à MySQL (encore une...) relativement basique.
Actuelement elle ne fait pas grand chose, si ce n'est du basic :
- gestion de plusieurs connexion/plusieurs serveurs (il s'agit en fait d'un multiton)
- connexion / deconnexion (automatique ou non)
- selection de base (automatique ou non)
- exécution de requête
- récupération des lignes d'un résultat ligne par ligne : fetch_row, fetch_array
- récupération de toutes les lignes d'un résultat, dans un tableau : fetch_rowset, fetch_arrayset
- nombre de lignes récupérées : num_rows
- nombre de lignes affectées : affected_rows

Rien de transcendant, si ce n'est un petit gadget que j'ai mis en place : des requêtes prédéfinies dans un fichier xml, et que l'on peut appeler directement directement par leur nom, grâce à la surcharge des méthodes introduite en php5. Par exemple, une requête qui récupère les informations des membres, appelée get_members, qu'on peut appeler ainsi :
$db -> get_members();
Ca fait un peu plugin...

Pour instancier l'objet, puisque c'est un multiton :
$db = DB::getInstance($server, $login, $password, $database);
 

Conclusion

Averissement : je poste cette source dans le but principal d'obtenir un produit correct. La version actuelle est loin d'être ce que je considère comme un produit correct...
Si vous avez des remarques, des critiques *constructives*, ne vous gênez pas. Si c'est juste pour dire que ma source est inutile, nulle, mal codée, économisez votre clavier en codant chez vous.
Je ne demande qu'à améliorer mes compétences, mon code, etc. N'hésitez pas à soumettre, à corriger, à améliorer (et à m'en faire part).
Si quelqu'un pense que le code gagnerait à devenir portable pour d'autres moteurs de bdd, avec classes abstraites et tout le tralala, je suis preneur, moi, j'y connais pas grand chose en POO.

En terme de développement pour l'avenir, j'aimerais implémenter un système de cache pour les requêtes fréquemment utilisées, histoire de limiter les requêtes SQL quand le résultat est toujours le même.

D'une classe basique, j'aimerais faire un véritable outil.
 

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 mfaraday le 27/12/2006 13:17:48

Salut.

Personnellement, pour ce que j'en ai vu, j'aime assez. J'ai juste survolé ton code.

J'aime bien l'utilisation du XML pour stocker le texte de tes requêtes souvent utilisées.

Flo

Note : 8/10

signaler à un administrateur
Commentaire de kankrelune le 27/12/2006 16:09:56

Le concept n'est pas bon... il est inutile d'encapsuler dans une class des fonction SGDB si ce n'est pas une class d'abstraction... tu alourdis le traitement pour rien... essaye de la modifier pour faire une class d'abstraction SGDB et là ta class prendra tout son interet... .. .

Sinon je n'ais pas regardé en détail le code je le ferais plus tard mais ça à l'air pas mal... l'idées des requetes via un fichier xml est très bonne... .. .

par contre ça c'est pas beau...

$fetch_function = 'mysql_fetch_' . $type;
$rowset = array();
for ($i=0 ; $i < $this -> num_rows() ; $i++)

-1- tu ne vérifie pas que $type est valide si je fais $type = 'pwet' ça donne quoi ?
-2- tu fais ton num rows dans le for (200 résultats = 200 num rows)... il faut le faire avant et affecter le résultat à une variable

@ tchaOo°

signaler à un administrateur
Commentaire de neigedhiver le 29/12/2006 15:23:50

Pour ce qui est d'abstraire la classe, je suis d'accord... C'est pour ça que je disais :
"Si quelqu'un pense que le code gagnerait à devenir portable pour d'autres moteurs de bdd, avec classes abstraites et tout le tralala, je suis preneur, moi, j'y connais pas grand chose en POO."
Et je le répète, je suis pas développeur de formation, la POO, je découvre doucement...
Cependant, je ne vois pas en quoi le traitement est alourdi... Je suis preneur d'explications.

Kankrelune : "-1- tu ne vérifie pas que $type est valide si je fais $type = 'pwet' ça donne quoi ?"

Effectivement... Il ne m'était pas venu à l'idée qu'on puisse appeler fetch('pwet')... Si je passe la méthode en private, ça permet de bloquer un appel direct non ? Est-ce que c'est une solution, ou bien vaut-il mieux virer l'alias et faire des fonctions distinctes fetch_row et fetch_array, quitte à répéter du code ?


Kankrelune : "-2- tu fais ton num rows dans le for (200 résultats = 200 num rows)... il faut le faire avant et affecter le résultat à une variable"

Alors là, mea culpa... Je suis d'ordinaire le premier à faire attention à ça, et puis là, j'avais la tête ailleurs... C'est une bête erreur d'étourderie, merci de l'avoir signalée.

Merci pour ces commentaire qui me permettent d'avancer.

signaler à un administrateur
Commentaire de mfaraday le 29/12/2006 16:08:23

Salut

Pour la remarque 1 de kankrelune, pas besoin de modifier grand chose (enfin je pense)

Tu fais un $fetch_method = array ('assoc', 'array',...);

et dans ta fonction tu fait un !in_array

#  public function fetch($type='array')
#    {
#    if(!in_array($type, $this->fetch_method))
#        {
#        return false;
#        // ou tu généres un message d'erreur un truc genre throw new exception mais la je
#        // peux pas t'aider :)
#        }
#    else
#        {
#        // Le reste de ta fonction
#        }
#    }

Voila j'espère avoir pu t'aider :)

Flo

signaler à un administrateur
Commentaire de kankrelune le 29/12/2006 16:49:54

Comme mfaraday à la différence que je ne pense pas que créer un attribut de class soit utile

if(!in_array($type, array('assoc','array'...))

Mais si tu veux que cette méthode ne soit pas accessible en public la mettre en private ou en protected est effectivement la meilleur solution... .. .

Concernant l'abstraction du moteur tu trouvera quelques bon exemple sur ce site... je pense notament à la class de FhX et à celle de Malalam qui seront des bonnes bases sur lesquelles t'appuyer... .. .

@ tchaOo°

signaler à un administrateur
Commentaire de FhX le 29/12/2006 20:55:43

vi mais chui en train de la refaire (encore et encore... j'ai trouvé des trucs interessants OO :p)

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Formulaire avec select et update de bdd mysql [ par arnold002 ] Bonjour &#224; tous,J'ai un formulaire qui contient 2 champs de type select : classe et annee.Je veux associer chaque classe &#224; chaque ann&#233;e passage de variables de form vers bdd mysql [ par arnold002 ] Bonjour,Mon probl&#232;me n'avance pas...Mon form contient 2 champs select for($i<FONT color=#008000 s Problème affichage BD multiples [ par ekipage2 ] Bonjour,j'ai plusieurs BD : eleve / matières / et exercicesLorque l'élèv se connecte, il peut afficher la liste des exercices correspondants à sa clas Recherche mysql [ par simon0000 ] salut tous le monde ,j'ai une table mysql nom&#233;&nbsp;ecole ou il ya Retour des données d'une classe MySQL [ par Jerem_ ] Salut, Depuis ce matin, j'asseye de coter une classe MySQL pour mon site. La classe marche tr&#232;s bien quand je fait une requete INSERT, etc .. M Bug dans une double liste [ par stu76 ] Bonjour, Malalam m'a donné des infos hier sur les doubles liste, et je le remercie car ca ma été super utile. J'ai presque résolu le prob sauf que je Problème de code [ par stu76 ] Bonjour tout le monde ,Voil&#224; je planche sur un programme scolaire et j'ai un gros prob, je travaille sur un programme qui utilise trois base de d Problème d'utilisation d'une classe MySQL du site [ par tataye ] Bonjour,Je suis en train de faire des tests avec la classe SQL  de FhX (source N°33135) et je rencontre actuellement quelques difficultés.J'ai fait un inclusion d'une classe provenant d'un autre fichier [ par lilippx ] salut, je me suis mis au php ce matin mais je bute sur un petit truc (dès le premier jour, ce n'est pas motivant...)je n'arrive pas à instancier un ob Probleme POO [ par cedriclomb ] Bonjour,Aujourd'hui au programme casse tete chinois ! :DVoila j'ai une classe B qui est une extends de Aun objet $b=new B;et ensuite $b-&gt;loadModule


Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, 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,842 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é.