Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PDO
PDO Forum d'entraide sur PDO (PHP Data Objects) : pilote générique de bases de données avec PHP. Avant de poster -> FAQ PDO et Cours PDO
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 31/12/2007, 15h07   #1
Membre éclairé
 
Homme Nicolas
Technicien réseaux et télécoms
Inscription : février 2004
Messages : 341
Détails du profil
Informations personnelles :
Nom : Homme Nicolas
Âge : 32
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Technicien réseaux et télécoms

Informations forums :
Inscription : février 2004
Messages : 341
Points : 393
Points : 393
Par défaut Include & Classe

Bonjour,
j'essaie d'utiliser PDO dans ma Classe avec un fichier include:

connect.inc.php
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
    define('USER1', 'root');
    define('PASS1', 'password');
    define('DSN1', 'mysql:host=localhost;dbname=maBaseDeDonnees');
    try
    {
	$dbh = new PDO(DSN1, USER1, PASS1);
    catch (PDOException $e)
    {
	print "Erreur ! : " . $e->getMessage() . "<br/>";
	die();
    }
?>
maClasse.class.php
Code :
1
2
3
4
5
6
7
 
<?php
    include_once("connect.inc.php");
...
    $dbh->exec($requete);
...
?>
$dbh n'est pas reconnu dans ma classe.
($dbh a pour valeur: null )

Est-ce normal ?
Est-il possible d'utiliser un include dans une classe pour gerer la connexion a la base ?

ou bien dois-je ajouter un attribut dans ma classe pour gerer cette connexion ?
Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
<?php
Class maClasse {
    private $dhb;
    ...
    public function __construct(...)
    {
        $dhb = new PDO(...);
    }
 
    ...
?>
merci d'avance pour vos lumières.
xufux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2007, 16h27   #2
Membre actif
 
Inscription : mars 2007
Messages : 171
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 171
Points : 171
Points : 171
Je viens de faire le test suivant, peut être que cela peut t'aider :

Le fichier connect.php

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
<?php
        Class myPDO {
                private $myvar = 0;
 
                function __construct( )
                {
                        /* .... */
                        $this->myvar = 1;
                }
 
                function MyVar( )
                {
                        return( $this->myvar );
                }
        }
 
        $dbh = new myPDO( );
?>


Le fichier maclass.php :

Code :
1
2
3
4
5
6
7
8
 
<?php
        include_once( 'connect.php' );
 
        $ret = $dbh->MyVar( );
        echo "ret = [$ret]";
 
?>
ericduval est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2007, 16h40   #3
Membre éclairé
 
Homme Nicolas
Technicien réseaux et télécoms
Inscription : février 2004
Messages : 341
Détails du profil
Informations personnelles :
Nom : Homme Nicolas
Âge : 32
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Technicien réseaux et télécoms

Informations forums :
Inscription : février 2004
Messages : 341
Points : 393
Points : 393
tu n'as pas bien compris ma question:

la classe PDO est une classe de PHP, ce n'est pas une classe que j'ai créée.
et mon problème c'est que, dans ma classe, l'objet $dbh de connect.php n'est pas reconnu.

(ma classe perso est dans le 2eme fichier, pas dans le connect.php)
xufux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2007, 17h03   #4
Membre actif
 
Inscription : mars 2007
Messages : 171
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 171
Points : 171
Points : 171
Je sais que PDO est une classe proposée par php.
J'ai simplement créé la classe myPDO juste pour l'exemple.

L'important étant que la variable $dbh est bien initialisée et
que tu la retrouves correctement initialisée dans le fichier myclass.php.
Le principe de ta découpe de fichier est donc correct. C'est cela que j'ai voulu
vérifier.

D'ailleurs tu peux déplacer la classe myPDO dans un fichier mypdo.php en ajoutant une ligne require( 'mypdo.php' ) dans le fichier connect.php, ça reste fonctionnel.

Je suis navré si je suis toujours hors sujet.
ericduval est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/12/2007, 17h13   #5
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
C'est une question de portée car ça fonctionne comme les fonctions (les méthodes en sont plus ou moins). Votre classe n'a pas accès à la variable $dbh du contexte global sans utiliser la syntaxe $GLOBALS['dbh'] ou une déclaration telle global $dbh en début de toute méthode y ayant recours. D'un point de vue conceptuel il faudrait passer cette variable en paramètre voir mieux étendre la classe PDO.

Par contre, pour que PDO génère des exceptions en lieu et place d'erreurs, il vous manque, je pense :
Code :
$objet_pdo->setAttribute(PDO::ATTR_ERRMODE , PDO::ERRMODE_EXCEPTION);
(Comment gérer les exceptions avec PDO ?)
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h04.


 
 
 
 
Partenaires

Hébergement Web