IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[POO] Objet et gestion de BDD [Fait]


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 201
    Points : 108
    Points
    108
    Par défaut [POO] Objet et gestion de BDD
    Salut,

    J'ai créé une classe DB en PHP4 qui me permet de gérer une DB MySQL.
    J'aimerais créer d'autres classes qui auraient besoin de questionner la base. Je me demandais donc quelle était la meilleure méthode pour ne pas avoir à instancier plusieurs fois la classe DB.

    Je m'explique:
    Si dans une classe "Articles" je dois récupérer les informations de la table "articles" et que dans une autre classe "Users" je dois récupérer les informations des clients, comment faire pour ne pas risquer de créer plusieurs connexions à la base de données ?
    Je sais que mysql_connect recherche la dernière ouverture à la base mais ça ne serait pas très propre...

    PS: Je peux utiliser PHP5...

  2. #2
    Rédacteur
    Avatar de Yoshio
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 732
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 732
    Points : 2 853
    Points
    2 853
    Par défaut
    Utilise PDO.

  3. #3
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    Personnellement, j'utilise le même nom dans tous mes scripts pour l'instance correspondant à ma base de données (en l'occurence $gDbLink).
    Ca me permet de mettre un global $gDbLink a tous les endroits où j'utilise la base de données. Je m'assure ensuite qu'une instance est créée dans le script principal qui pourra être utilisée communément dans tous les autres scripts.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 201
    Points : 108
    Points
    108
    Par défaut
    Citation Envoyé par koopajah
    Personnellement, j'utilise le même nom dans tous mes scripts pour l'instance correspondant à ma base de données (en l'occurence $gDbLink).
    Ca me permet de mettre un global $gDbLink a tous les endroits où j'utilise la base de données. Je m'assure ensuite qu'une instance est créée dans le script principal qui pourra être utilisée communément dans tous les autres scripts.
    Oui mais je vais devoir créer une instance de la classe DB au début de chaque script ? Ca revient à se connecter à chaque fois, sans savoir si on a besoin d'interroger la base...

    Mais apparemment c'est la méthode que tout le monde utilise... :/

    Citation Envoyé par Yoshio
    Utilise PDO.
    J'avais déjà regardé pour cette extension en suivant le tutorial de Guillaume Rossolini.
    En quoi cela pourrait résoudre le problème ?

  5. #5
    Rédacteur
    Avatar de Yoshio
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 732
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 732
    Points : 2 853
    Points
    2 853
    Par défaut
    A ne pas réinventer la roue.

  6. #6
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    Citation Envoyé par hush
    Oui mais je vais devoir créer une instance de la classe DB au début de chaque script ? Ca revient à se connecter à chaque fois, sans savoir si on a besoin d'interroger la base...

    Mais apparemment c'est la méthode que tout le monde utilise... :/
    Oui et non. Tu peux créer une instance de ta classe de base de donnée pour que ta variable soit bien une instance de classe. Par contre la connexion ne sera réalisée qu'à la toute première requete sql. En gros au début de ton script parent tu as
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $gDbLink = new MaDatabase();
    Dans les scripts fils (ceux qui sont inclus dans le script père, ou qui vont inclure ce script père) tu as des
    Et ensuite tu ne fais la connection à ta base de données que lors d'une query. Comme ça, si aucun script n'a besoin de la base tu n'auras pas de connexion (juste une instance de la classe en mémoire) et quand tu fais la première requete, tu regardes le lien mysql dans tes variables de classe, s'il est initialisé alors tu fais la requête, sinon tu commences par te connecter avant de la faire.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 201
    Points : 108
    Points
    108
    Par défaut
    Citation Envoyé par Yoshio
    A ne pas réinventer la roue.
    J'ai codé cette classe il y a déjà longtemps... Puis je prefère faire un script maison plutôt que d'utiliser un framework ou une extension plus lourde.
    Merci quand même...

    koopajah, c'est une super idée, je n'y avais pas du tout pensé. Je vais réimplémenter la classe pour qu'elle se comporte comme ça. Merci beaucoup

  8. #8
    Rédacteur
    Avatar de Yoshio
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 732
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 732
    Points : 2 853
    Points
    2 853
    Par défaut
    PDO n'est ni un framework et ni une extension plus lourde, juste une interface d'abstraction pour les sgbd. Ce qui veux dire que quel que soit le code si t'a bien fait ta requete sql elle marchera avec mysql, oracle, ...

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 201
    Points : 108
    Points
    108
    Par défaut
    Citation Envoyé par php.net
    L'extension PHP Data Objects (PDO) définit une excellente interface pour accéder à une base de données depuis PHP.
    http://fr.php.net/pdo

    Tu es complètement à coté du sujet. Je ne demande pas comment m'abstraire du type de SGBD. J'utilise uniquement MySQL donc ça ne ferait bien qu'alourdir PHP en définissant du code dont je n'ai pas besoin. Je voulais simplement savoir comment disposer de mon instance DB dans mes différentes classes en établissant une connexion que lorsque j'en ai besoin.
    Question à laquelle m'a déjà très bien répondu koopajah que je remercie encore...

  10. #10
    Rédacteur
    Avatar de Yoshio
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 732
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 732
    Points : 2 853
    Points
    2 853
    Par défaut
    Arrete un peu de dire que ca fait allourdir ton code sans avoir tester ...

    Tout ceux qui utilise PDO pourront te dire que les fonctions mysql prennent bien plus de ligne pour faire quelques chose et le font moins bien. Et ce'st pas parcequ'on dit que PDO sert d'interface d'abstraction que tu peux pas l'utiliser pour des bete requète.

    Et arrete de deformer mes propos , j'ai jamais dit que PDO n'était pas une extension ...
    ni une extension plus lourde

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 11
    Dernier message: 15/04/2006, 23h27
  2. [POO] Objet Navigator
    Par AssKiller dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 28/10/2004, 10h38
  3. gestion de BDD
    Par Bûth dans le forum Bases de données
    Réponses: 11
    Dernier message: 09/06/2004, 18h28
  4. Gestion de bdd MySql
    Par carlito dans le forum Débuter
    Réponses: 2
    Dernier message: 30/03/2004, 14h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo