Bonjour,
J'ai un problème bizarre avec le module DB de PEAR que je teste en ce
moment. Je m'explique :
Le module est présent dans le répertoire PEAR, ce répertoire est bien
sûr référencé comme il se doit dans dans la liste des inclusions à
parcourir dans php.ini
D'ailleurs la directive include "DB/DB.php" fonctionne puisqu'en
placant des echos aux endroit statégiques (avant et après la
définition de la classe DB) il apparaissent à l'éxécution du script.
lorsque mon progarmme comporte ceci :
include("DB/DB.php");
$db = DB::connect("$dsn");
// $dsn est evidemment bien formé
Je me reçois systématiquement l'erreur :
Fatal error: Undefined class name ' db' in c:\program
files\easyphp\www\phpaie\user\inscription.php on line 25
Le plus troublant (enfin pour moi), c'est qu'il me semble que la
méthode 'connect' n'est pas appelée. J'ai essayé de tracer mais rien à
faure ça n'entre pas. (où alors l'interprétation d'une classe se fait
en deux passes analyse/éxécution dont la première n'autorise pas les
outputs ?? peut on confirmer ?)
include("DB/DB.php"); $db = DB::connect("$dsn"); // $dsn est evidemment bien formé
remplace include par require, en cas d'erreur, require provoque une sortie du programme.
sinon, il faudrait que tu nous montre ou ton include_path.
echo ini_get('include_path');
d'autre part en cas d'erreur, error_reporting(E_ALL) permet de traquer toutes les petites erreurs invisibles.
piache p.
Le 03 Jul 2003 14:04:42 GMT, xav à écrit:
Salut, Euhh, tu est sur de toi avec le "DB/DB.php" ?? Chez moi (et c'est standard normalement) DB.php est au premier niveau d'inclusion de PEAR Donc l'include est : include "DB.php"; tout court, apres DB.php va chercher dans le rep DB/ le bon driver correspondant a ton DSN.
Ben oui mais non ;-) Apparament ça marche bien comme ça et ça me semble logique : PEAR.php se trouve à la racine de l'inclusion et les modules sont dans leurs sous répertoires. Par exemple j'utilise quickform et il est placé dans le sous repertoire HTML de PEAR et inclus avec : require_once ("HTML/QuickForm.php"); Maintenant si il y a moyen de faire plus simple en mettant juste le nom du module je suis prenneur.
pareil, pour le DSN, tu n'est pas obligé de le quoter, ca ralentit juste ...
Et sinon pour savoir ce qu'il advient de ton connect, ben tu lui met un print_r : print_r(DB::Connect($dsn)), ou bien quelque chose de plus conventionnel :
require_once "DB.php"; $dbÛ::Connect($dsn); if (DB::isError($db) { die($db->getDebugInfo()); }
J'ai fait cela, et cela ne m'a pas avancé parce que le problème était à la fois beaucoup plus sioux et beaucoup plus con. (Voir le post précédent).
P.
Le 03 Jul 2003 14:04:42 GMT, xav <xav@spotk.net> à écrit:
Salut,
Euhh, tu est sur de toi avec le "DB/DB.php" ??
Chez moi (et c'est standard normalement) DB.php est au premier niveau
d'inclusion de PEAR
Donc l'include est : include "DB.php"; tout court, apres DB.php va
chercher dans le rep DB/ le bon driver correspondant a ton DSN.
Ben oui mais non ;-)
Apparament ça marche bien comme ça et ça me semble logique :
PEAR.php se trouve à la racine de l'inclusion et les modules sont
dans leurs sous répertoires. Par exemple j'utilise quickform et il est
placé dans le sous repertoire HTML de PEAR et inclus avec :
require_once ("HTML/QuickForm.php");
Maintenant si il y a moyen de faire plus simple en mettant juste le
nom du module je suis prenneur.
pareil, pour le DSN, tu n'est pas obligé de le quoter, ca ralentit juste
...
Et sinon pour savoir ce qu'il advient de ton connect, ben tu lui met un
print_r : print_r(DB::Connect($dsn)), ou bien quelque chose de plus
conventionnel :
require_once "DB.php";
$dbÛ::Connect($dsn);
if (DB::isError($db) {
die($db->getDebugInfo());
}
J'ai fait cela, et cela ne m'a pas avancé parce que le problème était
à la fois beaucoup plus sioux et beaucoup plus con. (Voir le post
précédent).
Salut, Euhh, tu est sur de toi avec le "DB/DB.php" ?? Chez moi (et c'est standard normalement) DB.php est au premier niveau d'inclusion de PEAR Donc l'include est : include "DB.php"; tout court, apres DB.php va chercher dans le rep DB/ le bon driver correspondant a ton DSN.
Ben oui mais non ;-) Apparament ça marche bien comme ça et ça me semble logique : PEAR.php se trouve à la racine de l'inclusion et les modules sont dans leurs sous répertoires. Par exemple j'utilise quickform et il est placé dans le sous repertoire HTML de PEAR et inclus avec : require_once ("HTML/QuickForm.php"); Maintenant si il y a moyen de faire plus simple en mettant juste le nom du module je suis prenneur.
pareil, pour le DSN, tu n'est pas obligé de le quoter, ca ralentit juste ...
Et sinon pour savoir ce qu'il advient de ton connect, ben tu lui met un print_r : print_r(DB::Connect($dsn)), ou bien quelque chose de plus conventionnel :
require_once "DB.php"; $dbÛ::Connect($dsn); if (DB::isError($db) { die($db->getDebugInfo()); }
J'ai fait cela, et cela ne m'a pas avancé parce que le problème était à la fois beaucoup plus sioux et beaucoup plus con. (Voir le post précédent).