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] class connexion et gestion BDD


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2007
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 33
    Points : 28
    Points
    28
    Par défaut [POO] class connexion et gestion BDD
    Bonjour,

    Je souhaite me lancer réellement dans la POO en php.
    Je cherche à créer une class de connexion, à une BDD de type inconnu pour PHP, qui va gérer l'ouverture d'une connexion, l'exécution d'une requête et la fermeture d'une connexion à une base (via source de données ODBC).

    Je n'arrive pas à trouver un tutoriel clair qui traite du sujet (je ne trouve que pour MySql). Je ne souhaite pas trouver un code tout fait car je veux comprendre le principe et avoir un code propre et minimaliste.

    J'ai fais un petit essaie mais il n'est pas concluant et je dois avouer que je ne comprend pas ce qui cloche.

    La class (elle ne gère que la connexion pour le moment, j'avance pas à pas)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    <?PHP
     
    class cnxOdbc {
     
      private $cnxHost;
      private $cnxUser;
      private $cnxPass;
     
      function __construct ($host,$user,$pass) {
     
        $this->cnxHost = $host;
        $this->cnxUser = $user;
        $this->cnxPass = $pass;    
     
      }
     
      function connexion () {
     
        odbc_connect($this->cnxHost, $this->cnxUser, $this->cnxPass)
          or die('<P align="center"><FONT color="red">Impossible de se connecter au serveur</FONT></P><BR>');
     
      }
     
      function deconnexion () {
     
        odbc_close();
     
      }   
     
    }
    ?>

    La page où j'instancie cette class et tente une requête simple.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?PHP
    REQUIRE_ONCE('libs/connexion.class.inc');
     
    $cnx = new cnxOdbc('source','user','pass');
    $cnx->connexion();
     
    $rqtTest = odbc_exec($cnx,'SELECT libelle FROM uneTable WHERE ID = 123');
     
    ECHO odbc_result ($rqtTest, 'libelle');
     
    ?>
    Il me retourne cette erreur : Warning: odbc_exec(): supplied argument is not a valid ODBC-Link resource in C:\wamp\www\test\test.php on line 8


    Au final j'aimerai que cette class gère la totalité de l'accès aux données de mon projet. Elle devra prendre en charge :
    - Ouverture d'une connexion
    - Exécution de requête (INSERT/UPDATE, SELECT, DELETE) passé en paramètre
    - Renvoie du résultat dans une variable array afin de ne manipuler que cette variable (ça aussi c'est pas gagné -_-)
    - Fermeture de la connexion

    Pour le moment mon projet fonctionne mais il n'est pas du tout objet .
    Auriez-vous une référence simple pour m'aider à comprendre le principe ?

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    ce que je te conseille de faire, si tu veux passer par le tout objet, est de créer une méthode permettant d'exécuter les requêtes depuis la classes, en ajoutant comme attribut de la classe la ressource de connexion. Voici comment je modifierais ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    <?php
     
    class cnxOdbc {
     
      private $cnxHost;
      private $cnxUser;
      private $cnxPass;
      private $cnxLink;
     
      public function __construct ($host,$user,$pass) {
        $this->cnxHost = $host;
        $this->cnxUser = $user;
        $this->cnxPass = $pass;    
      }
     
      public function connexion () {
        $this->cnxLink = odbc_connect($this->cnxHost, $this->cnxUser, $this->cnxPass)
          or die('<P align="center"><FONT color="red">Impossible de se connecter au serveur</FONT></P><BR>');
     
        if (!$this->cnxLink) {
          // La connexion a echoue
          return false;
        } else {
          return true;
        }   
      }
     
      public function deconnexion () {
        odbc_close($this->cnxLink);
      }
     
      public function executer($requete) {
        return odbc_exec($this->cnxLink, $requete);
      }
    }
    ?>
    Et après, au niveau de ton traitement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
    REQUIRE_ONCE('libs/connexion.class.inc');
     
    $cnx = new cnxOdbc('source','user','pass');
    $cnx->connexion();
    $donnees = $cnx->executer('SELECT libelle FROM uneTable WHERE ID = 123');
     
    // ...
     
    ?>
    Bon c'est loin d'être complet, mais ça pourra peut être t'aider pour continuer !

  3. #3
    Nouveau membre du Club
    Inscrit en
    Janvier 2007
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 33
    Points : 28
    Points
    28
    Par défaut
    Oh merci beaucoup !! Ta modification est tout à fait ce que je cherche à obtenir.
    Grâce à toi je comprends bien mieux.


    Il reste un détail, tu peux sans doutes m'aider à choisir la manière la moins usine à gaz de faire.

    Une fois une requête SELECT exécutée, je peux obtenir le résultat avec un simple ECHO odbc($donnees,'libelle');

    Ce qui m'embête c'est d'utiliser une commande odbc dans mon traitement. J'aimerai utiliser quelque chose de plus "générique" afin de réellement séparer le traitement de l'accès aux données.

    Je pense alimenter une variable array au sein même de la class et accéder au résultat en listant ma variable. (Les SELECT que j'ai à faire ne concerne presque jamais les mêmes tables ni le même nombre de colonne).

    Je vois bien une solution avec une boucle WHILE mais j'ai peur d'alourdir fortement la chose.

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

Discussions similaires

  1. POO classe connexion à la DB en PDO
    Par Dvlop.com dans le forum Langage
    Réponses: 0
    Dernier message: 29/06/2011, 20h38
  2. [POO] POO > classe + connexion BDD
    Par onet dans le forum Langage
    Réponses: 11
    Dernier message: 20/11/2008, 12h00
  3. [POO] class php de gestion de stats
    Par cedsib dans le forum Langage
    Réponses: 5
    Dernier message: 18/05/2006, 12h43
  4. Réponses: 11
    Dernier message: 15/04/2006, 23h27
  5. [POO] PHP et la gestion des classes
    Par Acti dans le forum Langage
    Réponses: 7
    Dernier message: 23/09/2005, 00h06

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