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 :

classe de connexion [PDO]


Sujet :

PHP & Base de données

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 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut classe de connexion
    Bonjour,

    je voudrais créer une classe de connection à une bdd en PDO.

    Voici mon code :
    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
    class Db {
     
        public $db;
     
        /**
         * Connect to the database
         * @param $dbhost
         * @param $dbname
         * @param $dbuser
         * @param $dbpswd
         */
        function __construct($dbhost, $dbname, $dbuser, $dbpswd){
            $this->db = new PDO('mysql:host='.$dbhost.',dbname='.$dbname.',charset=utf8', $dbuser, $dbpswd);
        }
    ...
    }
     
    et  
     
    $db=new Db('mysql:host='.DATABASE_HOST.',dbname='.DATABASE_NAME,DATABASE_USER, DATABASE_PASSWORD);

    et les messages d'erreur :
    Fatal error: in C:\wamp64\www\mvc_udemy\_classes\Db.php on line 21
    PDOException: in C:\wamp64\www\mvc_udemy\_classes\Db.php on line 21

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Laurent, tu as bien conscience que si on ne voit pas la ligne 21 (et les lignes autour) de ta classe Db , on a aucune chance de voir l'erreur.

    Et sinon, ta chance construit la chaine de connexion "mysql=...", donc il est inutile de la passer en paramètre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $db=new Db(DATABASE_HOST, DATABASE_NAME, DATABASE_USER, DATABASE_PASSWORD);
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

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

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut
    Bonjour Celira,

    j'ai modifié l'appel (de la ligne 20 ci-dessus) : $db=new Db(DATABASE_HOST,DATABASE_NAME,DATABASE_USER, DATABASE_PASSWORD); et la ligne 21 correspond à la ligne 13 ci-dessus.
    Les messages d'erreur n'ont pas changé

    Je ne m'étais pas posé de question sur ce code, l'ayant récupéré sur Github : https://github.com/AxelPariss/DB/blob/master/src/DB.php et ayant été écrit par un formateur...

  4. #4
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 511
    Par défaut
    Salut,

    On sépare le dsn par un point-virgule, avant "dbname" et avant "charset=utf8" :

    Sans paramètres dans le constructeur :

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    <?php 
    define('DATABASE_HOST','localhost');
    define('DATABASE_NAME','....');
    define('DATABASE_USER','...');
    define('DATABASE_PASSWORD','...');
    class Db {
     
            private $db;
    	private $dbhost;
    	private $dbname;
    	private $dbuser;
    	private $dbpswd;
     
        /**
         * Connect to the database
         * @param $dbhost
         * @param $dbname
         * @param $dbuser
         * @param $dbpswd
         */
        function __construct(){//sans paramètres ici
    		$this->dbhost=DATABASE_HOST;
    		$this->dbname=DATABASE_NAME;
    		$this->dbuser=DATABASE_USER; 
    		$this->dbpswd=DATABASE_PASSWORD;
    		try{
    			$this->db = new PDO('mysql:host='.$this->dbhost.';dbname='.$this->dbname.';charset=utf8'
    			     , $this->dbuser
    			     , $this->dbpswd
    			     ,array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION)//s'ils y a des erreurs ou avertissement, on les affichent
                            );
    		} catch(Exception $e){
    			die('Erreur de connexion à la base :'.$e->getMessage());//si pdo n'a pas pu se connecter à la base, il renvoi une erreur
    		}
        }
    	public function prepare($query){
    		return $this->db->prepare($query);
    	}
    }  
     
    $db=new Db();
    $res=$db->prepare('select * from NOMTABLE');
    $res->execute();
    while($d=$res->fetch()){//affichage des données...
    	echo $d['NOM_COLONNE'];
    }

    Avec les paramètres dans le constructeur :
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    <?php 
    define('DATABASE_HOST','localhost');
    define('DATABASE_NAME','...');
    define('DATABASE_USER','...');
    define('DATABASE_PASSWORD','...');
    class Db {
     
            private $db;
    	private $dbhost;
    	private $dbname;
    	private $dbuser;
    	private $dbpswd;
     
        /**
         * Connect to the database
         * @param $dbhost
         * @param $dbname
         * @param $dbuser
         * @param $dbpswd
         */
        function __construct($dbhost,$dbname,$dbuser,$dbpswd){
    		$this->dbhost=$dbhost;
    		$this->dbname=$dbname;
    		$this->dbuser=$dbuser; 
    		$this->dbpswd=$dbpswd;
    		try{
    			$this->db = new PDO('mysql:host='.$this->dbhost.';dbname='.$this->dbname.';charset=utf8'
    			, $this->dbuser
    			, $this->dbpswd
    			,array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION));
    		} catch(Exception $e){
    			die('Erreur de connexion à la base :'.$e->getMessage());
    		}
        }
    	public function prepare($query){
    		return $this->db->prepare($query);
    	}
    }  
     
    $db=new Db(DATABASE_HOST,DATABASE_NAME,DATABASE_USER,DATABASE_PASSWORD);
    $res=$db->prepare('select * from NOMTABLE');
    $res->execute();
    while($d=$res->fetch()){//affichage des données...
    	echo $d['NOM_COLONNE'];
    }

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

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 493
    Billets dans le blog
    1
    Par défaut
    Bonjour Toufik83, j'ai mis les points-virgule là où tu dis :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     function __construct($dbhost, $dbname, $dbuser, $dbpswd){
            debug($dbuser);debug($dbspwd);
            $this->db = new PDO('mysql:host='.$this->dbhost.';dbname='.$this->dbname.';charset=utf8'
    			, $this->dbuser
    			, $this->dbpswd);
        }
    mais j'ai un autre message d'erreur maintenant :
    Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] [1045] Accès refusé pour l'utilisateur: ''@'@localhost' (mot de passe: NON)' in C:\wamp64\www\dvp\_classes\Db.php on line 24
    la ligne 24 étant ici la ligne 5 (et comme je suis en local (Wampserver), j'ai mis user=localhost et mot de passe vide...)

  6. #6
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 511
    Par défaut
    Accès refusé pour l'utilisateur: ''@'@localhost'
    Tu-es sûr que t'as mis le bon nom d'utilisateur ?

    Montre moi tout le code de la classe s'il te plait....

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

Discussions similaires

  1. Cannot create JDBC driver of class '' for connect URL 'null'
    Par edenyorke dans le forum Tomcat et TomEE
    Réponses: 4
    Dernier message: 27/06/2011, 19h29
  2. Réponses: 8
    Dernier message: 29/04/2011, 12h02
  3. Classe de connection à BDD
    Par clebig dans le forum Langage
    Réponses: 3
    Dernier message: 14/07/2007, 13h45
  4. Cannot create JDBC driver of class '' for connect URL 'null'
    Par Elwe31 dans le forum Tomcat et TomEE
    Réponses: 14
    Dernier message: 11/07/2007, 17h43
  5. Réponses: 7
    Dernier message: 10/09/2006, 11h58

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