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 :

Passer un objet PDO via une variable de session [PDO]


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2010
    Messages : 25
    Points : 5
    Points
    5
    Par défaut Passer un objet PDO via une variable de session
    Bonjour à tous

    J’ai créer une classe qui donne une instance de connexion à une base de donnée, et je veux pouvoir utiliser cet objet quand je veux dans mes pages php donc je la fait par une variable de session. Mais ca me met une erreur que je narrive pas à debugger.

    Voici la classe ou je dfini ma classe de connection : connection.class.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
    52
    53
    54
     
     class Connection{
     
    		 public static $con;
    		 public $serveur;
    		 public $port;
    		 public $user;
    		 public $password;
    		 public $database;
     
    		 public function __construct($serveur, $port, $user, $password, $database){
     
    			 $this->serveur=$serveur;
    			 $this->database=$database;
    			 $this->port=$port;
    			 $this->user=$user;
    			 $this->password=$password;
     
     
    		 }
     
    		 public function connectBdd(){
    			 if(!isset(self::$con))
    			 {
     
    				 try{
    					self::$con= new PDO('mysql:host='.$this->serveur.';port='.$this->port.';dbname='.$this->database, $this->user, $this->password);
    					print "Connexion à la base de données ruessie";
    				 }catch(PDOException $e){
    					 print "Error.... Num : ".$e->getCode()." Message : ".$e->getMessage();
    					 die();
    				 }
    			 }
    			 else print "une instance de cnx existe déja<br>";
    			return self::$con;
    		 }
     
     
    		 /**
    		  *Methode défimit pour sauver les attributs avant la sérialisation
    		  */
    		 public function _sleep(){
    			 	$this->con= null;
    				//return array('serveur', 'port', 'user', 'password', 'database');
     
    			}
     
    			/**
    			 *Methode qui est appelée après la désérialisation, pour nous permettre de relncer la connexion
    			 */
    		 public function _wakeup(){
    			 $this->connectBdd();
    		 }
    	 }
    Et la mon fichier ou je stocke linstance de cnx dans une variable de session : test.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
     
    <?php
    	include "connection.class.php";
        session_start();
     
        if (!isset ($_SESSION['connexion']))
        {
           	$connexion = new Connection ('localhost', '8888','root', 'root', 'desimmob');
            $_SESSION["connexion"] = $connexion->connectBdd();
     
            print 'Actualisez la page !';
        }
     
        else
        {
            echo '<pre>';
            var_dump ($_SESSION['connexion']); // On affiche les infos concernant notre objet
            echo '</pre>';
        }
     
    ?>
    Et c avec le bout de code suivant que je teste pour voir si ca passe : rep.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    session_start();
    		include "connection.class.php";
     
    		$connexion = $_SESSION["connexion"];
     
     
     
    		$query1=("Select * from test");
    		$resultat = $connexion->query($query1);
    		while($ligne = $resultat->fetch(PDO::FETCH_OBJ)){
    				echo $ligne->nom."-______-".$ligne->prenom."<br/>";
    			}
    Quand je lance test.php sur le navigateur j’obtient cette erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Fatal error: Exception thrown without a stack frame in Unknown on line 0
    Et qund je lance rep.php sur le navigateur g cette erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Notice: Undefined index: connexion in /Applications/MAMP/htdocs/desimmob/classe_metier/rep.php on line 5
     
    Fatal error: Call to a member function query() on a non-object in /Applications/MAMP/htdocs/desimmob/classe_metier/rep.php on line 10
    Si kelkun à une idée ou une solution sur mon probleme, je suis preneur.

    Merci à tous

  2. #2
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 383
    Points : 10 411
    Points
    10 411
    Par défaut
    Citation Envoyé par gohanfaye Voir le message
    Bonjour à tous
    J’ai créer une classe qui donne une instance de connexion à une base de donnée, et je veux pouvoir utiliser cet objet quand je veux dans mes pages php donc je la fait par une variable de session.
    Et pourquoi tu ne fais pas une inclusion du fichier qui contient la classe de connexion dans tous les scripts qui en ont besoin ?

  3. #3
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    J’ai créer une classe qui donne une instance de connexion à une base de donnée, et je veux pouvoir utiliser cet objet quand je veux dans mes pages php donc je la fait par une variable de session. Mais ca me met une erreur que je narrive pas à debugger.
    Eeeeh perdu. Les objets PDO* ne peuvent pas être sérialisés donc on ne peut pas les mettre dans une variable de session car ces données sont supposées être linéarisées (ou sérialisées) ce qui signifie qu'elles seront transformées sous forme de chaine de caractères dans le but d'être mises dans le fichier de session d'apache.
    Vu que les objets PDO encapsulent des ressources, ce n'est pas possible à moins d'utiliser __sleep et __wakeup.

    La solution à ton problème est de créer un Singleton pour PDO et d'ouvrir ta connection en tant que persistante pour que d'une page à l'autre tu utilise toujours le même socket.
    - http://tonylandis.com/php/php5-pdo-singleton-class/
    - http://www.php.net/manual/en/ref.pdo-mysql.php

    A toi de jouer

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2010
    Messages : 25
    Points : 5
    Points
    5
    Par défaut
    En ce moment c ce que je fait. Mais je voulais juste tester une autre manière de faire. Mais malheuresemet ça ne marche pas et je suis impatient de savoir pourquoi. Ca me fera dormir moin bte ce soir lol.

  5. #5
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    La réponse à ton problème dans le post au dessus

    Dors bien.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2010
    Messages : 25
    Points : 5
    Points
    5
    Par défaut
    Merci Benji je v jeter un coup d’oeil sur la solution ke tum propose.

    Encore merrci

  7. #7
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 383
    Points : 10 411
    Points
    10 411
    Par défaut
    Citation Envoyé par gohanfaye Voir le message
    Merci Benji je v jeter un coup d’oeil sur la solution ke tum propose.

    Encore merrci
    Tout en sachant que les connexions persistantes ne sont pas à utiliser systématiquement. A toi de voir si oui ou non tu en as besoin. Et si non ton ancienne méthode (d'appeler le script de connexion dans chaque page en ayant besoin) est la bonne.

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2010
    Messages : 25
    Points : 5
    Points
    5
    Par défaut
    Ok ABCIWEB merci du conseil.

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 35
    Points : 24
    Points
    24
    Par défaut
    Bonsoir,

    Je galère depuis plusieurs jours à essayer la méthode indiquée par Benjamin.
    (je débute en POO )

    As tu réussi ? Je serai curieux de voir comment cela ce construit.

    Est-ce normal que dans la class "pdo-singleton-class.php" il n'y ai rien de prévu pour passer les paramètres des requêtes préparées ?

  10. #10
    Membre éclairé Avatar de Code62
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Novembre 2008
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2008
    Messages : 162
    Points : 898
    Points
    898
    Par défaut
    Hello berlo44,
    Est-ce normal que dans la class "pdo-singleton-class.php" il n'y ai rien de prévu pour passer les paramètres des requêtes préparées ?
    cette classe "remplace" la classe de base PDO, alors que les paramètres des requetes préparées se passent aux PDOStatement's, donc oui, a priori c'est normal

    Ceci étant dit, tu devrais créer ton propre sujet, celui-ci étant marqué "résolu", tu risques d'y trouver moins facilement de l'aide
    "Le premier venu peut écrire du code qu'un ordinateur peut comprendre. Les bons programmeurs écrivent du code que les humains peuvent comprendre."
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand."
    (Martin Fowler)

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 35
    Points : 24
    Points
    24
    Par défaut
    merci du conseil, je vais faire un sujet.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 19/04/2014, 13h26
  2. Réponses: 2
    Dernier message: 19/03/2009, 23h23
  3. [POO] Accéder à un attribut d'un objet via une variable
    Par iLoLo21 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 25/11/2008, 12h36
  4. Réponses: 12
    Dernier message: 17/01/2008, 11h46
  5. [JACOB] Comment passer un objet par référence à une méthode
    Par zlavock dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 21/03/2005, 18h28

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