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

PHP & Base de données Discussion :

Include & Classe [PDO]


Sujet :

PHP & Base de données

  1. #1
    Membre chevronné
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Février 2004
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms

    Informations forums :
    Inscription : Février 2004
    Messages : 345
    Par défaut Include & Classe
    Bonjour,
    j'essaie d'utiliser PDO dans ma Classe avec un fichier include:

    connect.inc.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
        define('USER1', 'root');
        define('PASS1', 'password');
        define('DSN1', 'mysql:host=localhost;dbname=maBaseDeDonnees');
        try
        {
    	$dbh = new PDO(DSN1, USER1, PASS1);
        catch (PDOException $e)
        {
    	print "Erreur ! : " . $e->getMessage() . "<br/>";
    	die();
        }
    ?>
    maClasse.class.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?php
        include_once("connect.inc.php");
    ...
        $dbh->exec($requete);
    ...
    ?>
    $dbh n'est pas reconnu dans ma classe.
    ($dbh a pour valeur: null )

    Est-ce normal ?
    Est-il possible d'utiliser un include dans une classe pour gerer la connexion a la base ?

    ou bien dois-je ajouter un attribut dans ma classe pour gerer cette connexion ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <?php
    Class maClasse {
        private $dhb;
        ...
        public function __construct(...)
        {
            $dhb = new PDO(...);
        }
     
        ...
    ?>
    merci d'avance pour vos lumières.

  2. #2
    Membre expérimenté
    Profil pro
    Ingénieur
    Inscrit en
    Mars 2007
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Mars 2007
    Messages : 199
    Par défaut
    Je viens de faire le test suivant, peut être que cela peut t'aider :

    Le fichier connect.php

    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
     
    <?php
            Class myPDO {
                    private $myvar = 0;
     
                    function __construct( )
                    {
                            /* .... */
                            $this->myvar = 1;
                    }
     
                    function MyVar( )
                    {
                            return( $this->myvar );
                    }
            }
     
            $dbh = new myPDO( );
    ?>


    Le fichier maclass.php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?php
            include_once( 'connect.php' );
     
            $ret = $dbh->MyVar( );
            echo "ret = [$ret]";
     
    ?>

  3. #3
    Membre chevronné
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Février 2004
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms

    Informations forums :
    Inscription : Février 2004
    Messages : 345
    Par défaut
    tu n'as pas bien compris ma question:

    la classe PDO est une classe de PHP, ce n'est pas une classe que j'ai créée.
    et mon problème c'est que, dans ma classe, l'objet $dbh de connect.php n'est pas reconnu.

    (ma classe perso est dans le 2eme fichier, pas dans le connect.php)

  4. #4
    Membre expérimenté
    Profil pro
    Ingénieur
    Inscrit en
    Mars 2007
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Mars 2007
    Messages : 199
    Par défaut
    Je sais que PDO est une classe proposée par php.
    J'ai simplement créé la classe myPDO juste pour l'exemple.

    L'important étant que la variable $dbh est bien initialisée et
    que tu la retrouves correctement initialisée dans le fichier myclass.php.
    Le principe de ta découpe de fichier est donc correct. C'est cela que j'ai voulu
    vérifier.

    D'ailleurs tu peux déplacer la classe myPDO dans un fichier mypdo.php en ajoutant une ligne require( 'mypdo.php' ) dans le fichier connect.php, ça reste fonctionnel.

    Je suis navré si je suis toujours hors sujet.

  5. #5
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    C'est une question de portée car ça fonctionne comme les fonctions (les méthodes en sont plus ou moins). Votre classe n'a pas accès à la variable $dbh du contexte global sans utiliser la syntaxe $GLOBALS['dbh'] ou une déclaration telle global $dbh en début de toute méthode y ayant recours. D'un point de vue conceptuel il faudrait passer cette variable en paramètre voir mieux étendre la classe PDO.

    Par contre, pour que PDO génère des exceptions en lieu et place d'erreurs, il vous manque, je pense :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $objet_pdo->setAttribute(PDO::ATTR_ERRMODE , PDO::ERRMODE_EXCEPTION);
    (Comment gérer les exceptions avec PDO ?)

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

Discussions similaires

  1. [PHP 5.3] Probleme d'include de class
    Par thebarbarius dans le forum Langage
    Réponses: 4
    Dernier message: 04/03/2010, 06h05
  2. pb fichier include pour classes dérivées
    Par Bapte59 dans le forum C++
    Réponses: 1
    Dernier message: 04/03/2009, 09h03
  3. [POO] [Alias] Problème d'include avec classe
    Par scorpiwolf dans le forum Langage
    Réponses: 3
    Dernier message: 05/06/2006, 20h55
  4. Include et class, avec 3 classes
    Par Captain_JS dans le forum C++
    Réponses: 2
    Dernier message: 26/02/2006, 17h50
  5. Réponses: 5
    Dernier message: 07/02/2006, 11h12

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