Comment utiliser la classe PDO dans WAMP5 ?

Eléphant du PHP | 60 Messages

05 mars 2009, 16:38

Bonjour,

je suis novice en php. Actuellement j'essaie de faire tourner une application mais elle génère le message d'erreur suivant :

"Définition de classe inexistante : PDO ../Classes/PDO.class.php "

Sachant que :
- Une classe DAO a été définie pour gérer les accès à la base de données.
- j'ai activé les extensions "php_pdo.dll", "php_pdo_mysqli.dll", "php_pdo_mysql.dll"
dans le fichier php.ini sans que cela change quelque chose.
- Il n'y a pas de fichier "PDO.class.php" dans mon répertoire ../Classes puisque la définition
de classes est censé être fournie en activant les extensions.


ci-après des bouts de codes qui peuvent vous aider à comprendre le contexte :

Code de la classe DAO

/**
* Classe d'accès aux données
* Cette classe est passé sur PDO (PHP Data Objects) qui permet d'abstraire la couche de données
* Voir fr.php.net/PDO pour plus d'informations
*/

class DAO {

	private $dbh;
	
	protected function __construct() {
		try{
			$this->dbh = new PDO( 'mysql:host=' . SERVER . ';dbname=' . DBASE , USER , PWD );
		}
		catch (PDOException $e){
			echo "__warning\nErreur [DB] => " . $e->getMessage();
		}

	}
	
	public function exec($p_query){
		try{
			$stmt = $this->dbh->prepare($p_query);
			$stmt->execute();
		}
		catch (PDOException $e){
			echo "__warning\nErreur [DB] => " . $e->getMessage();
		}
		return $stmt;	
	}
	
	public function exec_nquery($p_query){
		try{	
			$stmt = $this->dbh->prepare($p_query);
			$this->dbh->beginTransaction();
			$stmt->execute();
			$this->dbh->commit();
		}
		catch (PDOException $e){
			echo "__warning\nErreur [DB] => " . $e->getMessage();
		}
	}
}


Fonction qui a généré l'erreur
Sans doute suite à un appel du constructeur de DAO qui lui-même appelle celui de PDO.
cette fonction se trouve dans un autre fichier.
/*
 * Permet d'inclure la classe si elle ne l'est pas quand l'utilisateur créer une instance
 */ 
function __autoload($ClassName) {
	
	$_class = $DOCUMENT_ROOT . '../Classes/' . $ClassName . '.class.php';
		
	if(file_exists($_class)){
		require_once($_class);
	}
	else{
      die("Définition de classe inexistante : " . $ClassName . "\n" . $_class . "\n" . $_factory);
	}
}

Si quelqu'un peut me dire pourquoi la classe PDO n'est pas visible et accessoirement comment résoudre mon problème, ça m'aiderait beaucoup.
S'il faut des précisions aussi n'hésitez pas.

Merci d'avance.


P.S.:

Ma config:
Windows XP Pro SP2
Pentium 4 / 2,6 GH / 496 Ram
"La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information"
Albert Einstein.

Mammouth du PHP | 684 Messages

05 mars 2009, 17:40

L'autoload t'informe qu'il te manque le fichier PDO.class.php mais a priori ce n'est pas necessaire car c'est une
classe de PHP.
En PHP 5, ce n'est plus nécessaire. Vous pouvez définir la fonction __autoload() qui va automatiquement être appelée si une classe n'est pas encore définie au moment de son utilisation. Grâce à elle, vous avez une dernière chance pour inclure une définition de classe, avant que PHP ne déclare une erreur.
Regarde si l'extension est bien chargee avec l'aide d'une page phpinfo.php avec le code suivant :
<?php phpinfo();?>
Tu dois voir l'extension PDO chargee et les differents connecteurs (mysql, sqlite, etc...).
Zigz4g

Eléphant du PHP | 60 Messages

06 mars 2009, 10:12

En fait j'ai trouvé l'erreur peu de temps après avoir posté.

Effectivement, en enlevant les ';' dans le php.ini je n'ai fait que rendre disponible l'extension mais elle n'était pas activée. Je l'ai donc activée via le menu d'administration de wamp :

PHP Settings
--> PHP Extensions
--> php_pdo (un clic dessus).


Merci pour la réponse.
"La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information"
Albert Einstein.

Eléphant du PHP | 353 Messages

06 mars 2009, 10:51

Je n'avais pas osé de te dire de passer par le menu hier en pensant que c'était tout bête.
Comme quoi :D

La force de wamp c'est quand même cette facilité de chargement.
Pas la peine de trafiquer le php.ini

Eléphant du PHP | 168 Messages

08 mars 2009, 23:12

@GiorgioLino : Par curiosité, de quel script provient cette class ?
Merci

Eléphant du PHP | 60 Messages

09 mars 2009, 12:27

@Nico

Cette classe provient d'un des scripts php d'une application qui gère le suivi d'activités d'une équipe du Support Informatique. Cette classe est héritée par une deuxième classe plus importante où sont implémentées différentes méthodes qui permettre de créer/modifer/supprimer une activité, de lui assigner des personnels, etc.
Je ne peux pas t'en dire plus car je n'ai participé ni à la définition des specs, ni à la dev jusqu'ici. J'ai juste récupéré les sources en l'état et j'essaie de faire tourner l'appli (donc la débugger surtout) car elle n'est pas encore tout à fait opérationnelle.
"La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information"
Albert Einstein.