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 :

connexion PDO en POO [POO]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 500
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 500
    Billets dans le blog
    1
    Par défaut connexion PDO en POO
    Bonjour,

    j'ai créé une classe bdd qui hérite de PDO pour créer une connection. Mon souci est qu'il dit ne pas trouver la classe et je comprends pas.

    index.php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
    //autoloading
    include_once 'Autoloader.php';
     
    use _classes\Bdd\Bdd;
     
    $Bd = new Bdd('localhost','support_eis', 'root', '');
     
    var_dump($Bdd);
    ?>

    autoloader.php :
    Code php : 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
    <?php 
     
    class Autoloader {
    static function register() {
        define('DIR_ROOT', __DIR__.DIRECTORY_SEPARATOR);
     
        $autoloader = function($full_class_name) {
            // on prépare le terrain : on remplace le séparteur d'espace de nom par le séparateur de répertoires du système
            $name = str_replace('\\', DIRECTORY_SEPARATOR, $full_class_name);
            // on construit le chemin complet du fichier à inclure :a
            // il faut que l'autoloader soit toujours à la racine du site
            $path = DIR_ROOT.$name.'.php';
     
            // on vérifie que le fichier existe et on l'inclut
            // sinon on passe la main à une autre autoloader (return false)
            if (is_file($path)) {
                include $path;
                return true;
            } else {
                return false;
            }
        };
        spl_autoload_register($autoloader);
        }
    }
     
    Autoloader::register();

    Bdd.php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
     
    class Bdd extends PDO {
     
        public $Bdd;
     
    function __construct($Bddhost, $Bddname, $Bdduser, $Bddpswd) {
     
    $this->Bdd = new PDO('mysql:host=' . $this->Bddhost.';
    Bddname=' . $this->Bddname ,// virgule ici et pas point-virgule
    $this->Bdduser, 
    $this->Bddpswd);
        }
    }

    Message d'erreur :
    Fatal error: Uncaught Error: Class '_classes\Bdd\Bdd' not found in C:\wamp64\www\eis_oo2\index.php on line 7
    Pourquoi ?

  2. #2
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 500
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 500
    Billets dans le blog
    1
    Par défaut
    J'ai corrigé une erreur dans Bdd.php causée par un "remplacer partout", mais l'erreur reste .

    Bdd.php corrigé :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
     
    class Bdd extends PDO {
     
        public $Bdd;
     
    function __construct($Bddhost, $Bddname, $Bdduser, $Bddpswd) {
     
    $this->Bdd = new PDO('mysql:host=' . $this->Bddhost.';dbname=' . $this->Bddname ,// virgule ici et pas point-virgule
    $this->Bdduser, 
    $this->Bddpswd);
        }
    }
    dbname et pas Bddname à la ligne 9

  3. #3
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut,

    il manque le namespcae Bdd; dans la définition de ta classe Bdd, puis il faut que tu enregistres la classe dans un dossier Bdd
    Je voudrais savoir : tu ne comprends pas ce que j'écris dans mon blog ou tu ne le mémorises pas ? Parce que si c'est incompréhensible, c'est que tu ne dois pas être le seul à galérer et je devrais je pense réécrire certaines parties.

  4. #4
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 500
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 500
    Billets dans le blog
    1
    Par défaut
    Merci de me répondre.
    En fait, mon fichier Bdd.php est rangé dans le folder _classes\Bdd (tous les sous-répertoires contenant des fichiers définissant des classes sont dans le folder _classes). Donc faut-il mettre namespace Bdd ou namespace _classes\Bdd ?
    Mais de toute façon, dans les 2 cas, il trouve pas la classe PDO.

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    namespace Bdd;
    class Bdd extends PDO {
    ...etc

    message d'erreur :
    Fatal error: Class 'Bdd\PDO' not found in C:\wamp64\www\eis_oo2\_classes\Bdd\Bdd.php on line 3
    et pour répondre à ta question : on va dire que comme c'est un problème de POO mais pas de MVC, j'ai pensé que je n'y trouverais pas la réponse (Cela dit, si tu ne m'avais pas répondu, je pensais regarder comment tu avais fait). C'est vrai que quand je l'ai lu, j'ai trouvé ça très difficile à comprendre, mais depuis que je me suis plongé dans le bouquin de Bersini (mi août), je n'ai plus regardé ton blog (ni ton code).

  5. #5
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    A priori, vu le code de l'autoloader, cela devrait être
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    namespace _classes\Bdd;
     
    class Bdd
    extends \PDO
    {
    Tu as oublié le \ devant PDO,
    c'est, soit tu définis la dépendance explicitement et tu peux t'en passer comme ça :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    namespace _classes\Bdd;
     
    use PDO;  // dépendance
     
    class Bdd
    extends PDO
    {
    soit l'autre méthode indiquée juste avant.

  6. #6
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 500
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 500
    Billets dans le blog
    1
    Par défaut
    Il n'y a que la 2e méthode qui marche car avec la première :
    Error: Class '_classes\Bdd\PDO' not found in C:\wamp64\www\eis_oo2\_classes\Bdd\Bdd.php on line 10
    et Bdd.php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <?php
    namespace _classes\Bdd;
    //use PDO;  // dépendance
    class Bdd extends \PDO {
     
        public $Bdd;
     
    function __construct($Bddhost, $Bddname, $Bdduser, $Bddpswd) {
     
    $this->Bdd = new PDO('mysql:host=' . $Bddhost.';dbname=' . $Bddname ,// virgule ici et pas point-virgule
    $Bdduser, 
    $Bddpswd);
        }
    ...etc
    }

    A noter que dans le bouquin de Bersini, jamais vu l'emploi de l'antislash avant le nom de la classe dont on hérite (par contre, il ne parle que de classes qu'on a soit même définies) et jamais vu non plus l'emploi de use.

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

Discussions similaires

  1. [MySQL] Echec connexion PDO
    Par nicogis dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 18/05/2011, 09h21
  2. [MySQL] Problème de connexion PDO
    Par Nanais19 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 01/05/2011, 19h10
  3. [PDO] erreur de connexion PDO
    Par Souri84 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 22/04/2011, 13h57
  4. [PDO] classe de connexion PDO
    Par Kihmé Xs dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 29/04/2010, 23h03
  5. [PDO] Pb Connexion PDO sous ubuntu
    Par fabien62 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 27/04/2010, 18h13

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