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 :

[SQL] Conserver le database handler dans l'objet


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Mai 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 4
    Par défaut [SQL] Conserver le database handler dans l'objet
    Bonjour,

    Je m'essaie à la POO en php.

    J'ai créé une classe qui me permet de gérer les commandes

    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
     
    class commandes {
    	private $dbh;
     
    	function __construct() {
    		try {
    			$dbh = new PDO('mysql:host=xxx.xx.fr;dbname=yy', 'lllooo', 'huhu', array(PDO::ATTR_PERSISTENT => true));
    		} catch (PDOException $e) {
    			print "Error!: " . $e->getMessage() . "<br/>";
    			die();
    		}
    	}
     
    	function cmdes_non_exp() {
     
    		$stmt = $dbh->prepare("select id_cmde from commandes where id_etat = ?");
     
    		$cpt = 0;
    		if ($stmt->execute(array(1))) {
    			while ($row = $stmt->fetch()) {
    							print "Commande No $row[0]\n";
    			}
    		}
    	}
    Ce code provoque l'affichage de l'erreur
    Fatal error: Call to a member function prepare() on a non-objec
    Pourquoi ? Si j'insère le code du contructeur dans la méthode, la requête sql fonctionne... Il me semble que le database handler devrait être créé par le constructeur puis accessible depuis les différentes méthodes non ? Sinon, il faudrait ouvrir la cnx dans chaque méthode ? Il doit bien y avoir un moyen de rationnaliser tout cela mais lequel ? J'ai beau essayer, je ne trouve pas la solution.

    Merci pour votre aide.

    RG

  2. #2
    Membre Expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Par défaut
    Normal:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $stmt = $dbh->prepare("select id_cmde from commandes where id_etat = ?");
    Je ne voit pas de méthode prepare dans ta class
    Et si cela appartient a la class PDO, alors tu doit inclure le fichier php de la class PDO dans le fichier php de ta class

  3. #3
    Futur Membre du Club
    Inscrit en
    Mai 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 4
    Par défaut
    Euhh....
    Devrait créer un objet PDO ( classe livrée en std avec php5 ) et l'assigner à $dbh. La méthode prepare est une methode de l'objet PDO. Pourquoi devrais-je le déclarer ?

  4. #4
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Par défaut
    Montres le script où tu crées justement l'instance de ta classe pour voir.

    Sinon ajoutes un "var_dump($dbh)" avant de faire le prepare pour voir ce que contient ton $dbh justement.

    et je dirai, en plus qu'il ne faut pas utiliser $dbh mais $this->dbh mais ca je n'en suis pas sur (mais un test rapide semble le confirmer)

  5. #5
    Futur Membre du Club
    Inscrit en
    Mai 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 4
    Par défaut
    le "$this" ne fonctionne pas lors de l'instantiation de la classe..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->$dbh = new PDO(...)
    Ca me renvoi l'erreur
    Fatal error: Cannot access empty property in
    le var_dump($dbh) renvoi NULL.
    la classe commande est utilisée comme suit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    			$commandes = new commandes();
    			$commandes->cmdes_non_exp();

  6. #6
    Membre Expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->$dbh = new PDO(...)
    C'est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->dbh = new PDO(...)

  7. #7
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Par défaut
    C'est $this->dbh que j'ai écrit, faut pas mettre le $ pour les membres d'une classe.

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

Discussions similaires

  1. [Débutant] SQL Server Database Project dans Microsoft Visual Studio Professional 2013
    Par yaciin dans le forum Général Dotnet
    Réponses: 0
    Dernier message: 27/08/2014, 12h42
  2. ajout d'event handler sur des objet contenus dans un dataTemplate généré dynamiquement
    Par ElSpopo dans le forum Windows Presentation Foundation
    Réponses: 0
    Dernier message: 10/12/2013, 10h57
  3. Réponses: 2
    Dernier message: 04/03/2009, 10h32
  4. [SQL] Conditions sur une date dans une requete
    Par poufouille dans le forum Bases de données
    Réponses: 4
    Dernier message: 17/03/2004, 14h25
  5. TWebBrowser créé dans un objet.
    Par Speed41 dans le forum Composants VCL
    Réponses: 3
    Dernier message: 03/11/2003, 10h34

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