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 :

Portée de PDO


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2015
    Messages : 262
    Par défaut Portée de PDO
    Bonsoir,

    je cherche à comprendre le fonctionnement de PDO et de sa portée.
    j'ai réalisé un petit script qui fonctionne mais je cherche à comprendre certain principe qui m'échappe

    Class Connexion.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
    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
    48
    49
    50
    51
     
    <?php
     
    require 'Connexion_Param.php';
     
    Class Connexion {
     
    	private $_host = BD_HOST;
    	private $_dbName = DB_NAME; 
    	private $_user = DB_USER;
    	private $_pass = DB_PASS; 
    	private $_charset = BD_CHARSET; 
     
    	private $_error; 
    	private $_qerror; 
     
    	private $pdo; 
     
    	public function __construct ()
    	{
    		try
    		{
    			$dsn ="mysql:host=".$this->_host.";dbname=".$this->_dbName.";charset=".$this->_charset; 
    			$this->pdo = new PDO ($dsn, $this->_user, $this->_pass); 
    			$this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    			$this->pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
    		}
    		catch (PDOException $e)
    		{
    			echo 'Erreur de connection'. $e->getMessage(); 
    		}	
    	}
     
     
        static function getPDO(){  // est-il possible de créer une méthode appelée à partir d'un appel Connexion::getPDO (voir fichier Essai.php)
            if(!self::$pdo){
                self::$pdo = new Connexion();
            }
            //echo 'connexion ok';
            return self::$pdo;
        }
     
     
    	/*public function getPDO (){                 avec cette méthode j'arrive à créer ma connexion et réaliser mes req SQL dans le fichier Essai.php
    		return $this->pdo;
    	}*/
     
    }
     
     
    ?>
    fichier : essai.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
     
    <?php
     
    require_once 'Connexion.php'; 
    //$bdd = (new Connexion())->getPDO();   --> avec cette méthode j'arrive à faire mes requêtes
     
    $bdd = Connexion::getPDO();  // Fatal error: Access to undeclared static property: Connexion::$pdo in C:\wamp64\www\test\LOGICIEL FINAL\CLASS\Connexion.php on line 35 -> comment la rendre accessible ? je ne comprends pas tout
     
     
    $sql = "SELECT * FROM ligue"; 
     
    $ligues = $bdd->prepare($sql);
    $ligues->execute();
     
    $result = $ligues->fetchAll();
    print_r($result);
    Si j'ai bien lu PDO est créé localement dans une variable. Et je dois rendre cette variable accessible en dehors. J'ai lu qu'il fallait également éviter des variables globales...je suis un peu paumé...

    merci pour votre aide

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    avec cette méthode j'arrive à créer ma connexion et réaliser mes req SQL
    Donc quel est ton problème ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2015
    Messages : 262
    Par défaut
    J'essaye de faire marcher ce code pour comprendre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        static function getPDO(){        // est-il possible de créer une méthode qui serait appelée dans les scripts qui auraient besoin d'une connexion PDO  --> Connexion::getPDO  (voir fichier Essai.php)
            if(!self::$pdo){
                self::$pdo = new Connexion();
            }
            //echo 'connexion ok';
            return self::$pdo;
        }

    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
    <?php
     
    require_once 'Connexion.php'; 
    //$bdd = (new Connexion())->getPDO();   --> avec cette méthode j'arrive à faire mes requêtes
     
    // commnent faire marcher ce code ?? est-ce possible ?
    $bdd = Connexion::getPDO();  // Voici le message : Fatal error: Access to undeclared static property: Connexion::$pdo in C:\wamp64\www\test\LOGICIEL FINAL\CLASS\Connexion.php on line 35 -> comment la rendre accessible ? je ne comprends pas tout
     
     
    $sql = "SELECT * FROM ligue"; 
     
    $ligues = $bdd->prepare($sql);
    $ligues->execute();
     
    $result = $ligues->fetchAll();
    print_r($result);

  4. #4
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Ton problème n'a rien à voir avec PDO.
    Le message est extrêmement clair :
    Access to undeclared static property
    Tu essais d'accéder à une propriété static ( en l'occurence $pdo ) qui n'existe pas puisque tu ne l'as pas déclarer statique.

    Tu semble essayer de faire un singleton qui n'en est pas un.

    Donc, soit tu instancies ta classe avec un new à chaque fois et ta fonction getPDO() n'a pas lieux d'être.
    Soit tu veux garder une seule et unique instance de ta classe (ce qui en PHP n'a pas vraiment de sens mais passons) auquel cas il faut faire un singleton :

    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
    final class Connexion
    {
        private static $instance
        public static function getPDO()
        {
            if (!isset(self::$instance)) {
                self::$instance = new Connexion();
            }
            return self::$instance;
        }
     
        private function __construct()
        {
     
        }
    }
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Réponses: 6
    Dernier message: 18/11/2010, 11h49
  2. [PHP 5.3] Portée variable pdo
    Par rikemSen dans le forum Langage
    Réponses: 3
    Dernier message: 24/09/2010, 22h05
  3. Port parallele
    Par Phoneus dans le forum C
    Réponses: 2
    Dernier message: 05/05/2002, 23h19
  4. [Kylix] Kylix port //
    Par Anonymous dans le forum EDI
    Réponses: 1
    Dernier message: 01/04/2002, 12h30
  5. [Kylix] Kylix / port serie
    Par Anonymous dans le forum EDI
    Réponses: 3
    Dernier message: 01/04/2002, 12h07

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