Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2925 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [Resolu] Problème d'include et de connexion à une database avec MDB2

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Resolu] Problème d'include et de connexion à une database avec MDB2

n°1803510
alcomachao​n
Pamplemousse
Posté le 23-10-2008 à 13:38:32  profilanswer
 

Salut a tous!
 
J'ai un petit probleme avec php et une include.
 
Je suis en train de coder une petite routine pour une intranet ou j'ai besoin d'aller verifier l'existance d'un code entre par l'utilisateur dans une base de donnees qui nous est fournie et est maintenu par un autre organisme sur un serveur. Elle est en MSSQL.
J'ai aussi une bdd qui a ete developpee en internet et est hebergee sur un autre serveur. Celle ci est en MySQL.
 
J'ai repris le code de qqun d'autre qui utilisait l'extension php PEAR et plus specifiquement le package MDB2.
 
En gros, pour se connecter a une base de donnees et faire des requetes, ca ressemble a ca :
 

Code :
  1. $dsn1 = 'mssql://login:pass@hostname/nomBase';
  2. $smdb2 =& MDB2::singleton($dsn1);
  3. if (PEAR::isError($smdb2)) {
  4.     die($smdb2->getMessage());
  5. }
  6. $query = 'du SQL';
  7. $res = $smdb2->queryAll($query);
  8. if (PEAR::isError($res))
  9. {
  10. echo"$query<br>";
  11. die($res->getMessage() . ', ' . $res->getDebugInfo());
  12. }


 
Bon maintenant ce que j'aimerai faire c'est recuperer le handle pour la bdd dans une fichier separe de mon code. Ainsi j'aurais juste a include le fichier qui s'occupe de ca et a utiliser mon handle dans ma page.
 
Le code ressemble donc a ca :
 
Le fichier a include (pour les tests, une base est sur un serveur, l'autre est sur mon pc et j'utilise Wamp)

Code :
  1. require_once("C:\Program Files\wamp\bin\php\php5.2.6\PEAR\MDB2.php" );
  2. $dsn1 = 'mssql://login:pass@hostname/PertracSQL_Test';
  3. $smdb2 =& MDB2::singleton($dsn1);
  4. if (PEAR::isError($smdb2)) {
  5.     die($smdb2->getMessage());
  6. }
  7. $smdb2->setFetchMode(MDB2_FETCHMODE_OBJECT);
  8. ////////////////////////////////////////////////////////////////////////////
  9. $dsn = 'mysql://root@localhost/lafayette_prod';
  10. $mdb2 =& MDB2::singleton($dsn);
  11. if (PEAR::isError($mdb2)) {
  12.     die($mdb2->getMessage());
  13. }
  14. $mdb2->setFetchMode(MDB2_FETCHMODE_OBJECT);
  15. //////////////////////////////////////////////////////////////////////////
  16. ?>


 
Et le bout de code en lui meme :
 

Code :
  1. <?php
  2. require_once('include.php');
  3. function checkCode($code)
  4. {
  5. $smdb2 =& MDB2::singleton($dsn1);
  6. $query = ' Select * From table Where code = ' . '\'' . $code . '\'';
  7. $res = $smdb2->queryAll($query);
  8. if (PEAR::isError($res))
  9. {
  10. echo"$query<br>";
  11. die($res->getMessage() . ', ' . $res->getDebugInfo());
  12. }
  13. if (empty($res))
  14. {
  15.  return false;
  16. }
  17. else
  18. {
  19.  return true;
  20. }
  21. }
  22. echo codeCheck(some code);


 
Bon c'est pas le code exact mais ca donne une bonne idee. J'essaye juste de savoir si le code existe ou pas.
Le probleme c'est que malgre l'include, j'ai l'impression que le prog ne connait pas $dsn1 et tente donc se connecte a ma base MySQL par defaut et tente sa requete dans cette base, du coup ca marche pas.
 
Donc du coup j'ai deux question :
Suis-je oblige de mettre mon $dsn1 dans le code general et d'abandonner le include?
Pourquoi est-ce qu'il se connecte a ma base MySQL que j'ai sur mon ordi par defaut? C'est du a Wamp?


Message édité par alcomachaon le 24-10-2008 à 16:09:09
mood
Publicité
Posté le 23-10-2008 à 13:38:32  profilanswer
 

n°1803933
skeye
Posté le 24-10-2008 à 11:00:32  profilanswer
 

Attends, je sors ma boule de cristal pour savoir quelle erreur tu as et je te dis ça.[:dawa]


---------------
Can't buy what I want because it's free -
n°1804050
alcomachao​n
Pamplemousse
Posté le 24-10-2008 à 13:57:29  profilanswer
 

Oops désolé :D
 
L'erreur est donc :
 

Citation :

$MDB2 Error: no such table, _doQuery: [Error message: Could not execute statement] [Last executed query: Select Information.DataVendorName, Information.DataVendorID From MasterName, Information Where MasterName.ID = Information.ID And MasterName.MasterName = 'ALLBLUEL'] [Native code: 1146] [Native message: Table 'lafayette_prod.mastername' doesn't exist]


 
La table 'mastername' existe dans l'autre database (PertracSQL_Test) mais pas dans celle à laquelle il cherche à acceder (ici lafayette_prod).

n°1804052
flo850
moi je
Posté le 24-10-2008 à 14:01:01  profilanswer
 

donc la table n'existe pas et tu es surpris que ton select se gauffre ?  
 

n°1804054
skeye
Posté le 24-10-2008 à 14:01:56  profilanswer
 

ah mais j'avais pas fait gaffe, tu essayes d'utiliser deux instances différentes de mdb2...alors que c'est un singleton.[:joce]
Ton deuxième appel à singleton() écrase les paramètres de ta première instance.[:joce]


---------------
Can't buy what I want because it's free -
n°1804056
skeye
Posté le 24-10-2008 à 14:02:04  profilanswer
 

flo850 a écrit :

donc la table n'existe pas et tu es surpris que ton select se gauffre ?

 



relis le post initial:o


Message édité par skeye le 24-10-2008 à 14:02:20

---------------
Can't buy what I want because it's free -
n°1804078
flo850
moi je
Posté le 24-10-2008 à 14:13:22  profilanswer
 

oui , bon , ça va, j'aurai peut être du lire la question avant de répondre

n°1804141
alcomachao​n
Pamplemousse
Posté le 24-10-2008 à 14:55:20  profilanswer
 

skeye a écrit :

ah mais j'avais pas fait gaffe, tu essayes d'utiliser deux instances différentes de mdb2...alors que c'est un singleton.[:joce]
Ton deuxième appel à singleton() écrase les paramètres de ta première instance.[:joce]


 
Beh en fait l'un s'appelle smdb2 et l'autre mdb2 (j'ai pas choisi les noms :D) donc en theorie ca devrait pas poser de probleme non?
J'ai tente avec connect() mais ca ne change rien malheureusement.
 
Je suis toujours oblige de lui mettre le dsn1 dont il se sert pour se connecter...
 
Je crois que j'ai un probleme au niveau du scope des variables.
Lors d'un include (qui est une fonction), toutes les variables declarees dans le code inclu ne seront pas disponible dans le reste du code, c'est bien ca?
Si c'est ca, comment faire pour qu'elles le soient alors? Utiliser des variables globales?

n°1804159
skeye
Posté le 24-10-2008 à 15:07:16  profilanswer
 

alcomachaon a écrit :

 

Beh en fait l'un s'appelle smdb2 et l'autre mdb2 (j'ai pas choisi les noms :D) donc en theorie ca devrait pas poser de probleme non?

 

Documente toi sur le design pattern singleton, tu peux en "créer" autant que tu veux avec le nom que tu veux, au final c'est toujours la même instance qui est utilisée.

 
alcomachaon a écrit :

Je crois que j'ai un probleme au niveau du scope des variables.

 

Non non, c'est juste que MDB2 est un singleton, le problème. :D

 


alcomachaon a écrit :

Lors d'un include (qui est une fonction), toutes les variables declarees dans le code inclu ne seront pas disponible dans le reste du code, c'est bien ca?


Si, justement, un include c'est comme si tu insérais directement le code du fichier inclus à cet endroit.

 
alcomachaon a écrit :

Si c'est ca, comment faire pour qu'elles le soient alors? Utiliser des variables globales?

 

non.
Un idée naïve et simple à mettre en place serait d'appeler singleton() avant chaque requête, avec le bon dsn.


Message édité par skeye le 24-10-2008 à 15:07:28

---------------
Can't buy what I want because it's free -
n°1804244
alcomachao​n
Pamplemousse
Posté le 24-10-2008 à 16:08:45  profilanswer
 

Ok, je lisais la docu sur singleton() mais j'avais pas bien compris tout ca (en meme temps le nom aurait pu m'aiguiller...).
 
Je viens de tenter et ca marche effectivement, je sais pas ce que j'avais trafique avec mes variables j'ai bien pu les utiliser.
J'ai opte pour la solution d'appel a singleton() a chaque fois que j'ai besoin de me connecter a un bdd puisque je suis encore jeune et naif :D
 
Merci pour l'aide en tout cas!


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [Resolu] Problème d'include et de connexion à une database avec MDB2

 

Sujets relatifs
Problème balises bbcode...JFileChooser [Résolu]
VBS & ADSI Probléme de création de "dossier de base"Numéro de lignes - Galère [résolu]
Problème lié à l'utilisation d'une variable globaleproblème snmp et php
problème de compilation avec le mainjavascript : problème de "replace"
Problème Boost & STLPort sous Mingw (sous wxDev-C++)[Java] probleme reaffichage contentPane
Plus de sujets relatifs à : [Resolu] Problème d'include et de connexion à une database avec MDB2


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR