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 :

Problème de connexions simultanées différentes [Oracle]


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2003
    Messages
    223
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 223
    Points : 58
    Points
    58
    Par défaut Problème de connexions simultanées différentes
    Salut tout le monde !

    j'ai un problème avec mes connexions oracle, c tellement un truc de fou que je sais pas si je vais reussir a l'expliquer et si vous aller comprendre ...
    Je vais essayer d'etre clair ...

    En résumé, mon probleme et que j'ai 2 connexions oracle, et dans certains cas, les 2 connexions se melangent, on dirait que PHP perd les pédales ...
    Mais dans d'autre, ca fonctionne.
    J'ai fait un script de test, qui reprends le contexte de mon vrai script en simplifié ...

    Voici le fonctionnement :

    En debut de script, je me connecte a une base que nous appelons supervision, la connexion me retourne une variable que j'appelle : $c_client.

    Ensuite, j'ai un tableau qui contient des noms de projets (nous avons une base par projet).

    Dans une boucle for, je parcours ce tableau de projets.
    Je fais une 1ere requete sur la base supervision (requete sur la table d_product).
    - Ensuite, je fais une connexion sur le projet en cours qui me retourne une variable appelée $c_projet.
    - Ensuite, je fais une 2ème requete sur la base supervision.

    --> Cette requete plante : ociexecute(): OCIStmtExecute: ORA-00942: Table ou vue inexistante

    En effet, la table d_product existe sur la base supervision, mais pas sur la base du projet en cours.

    Conclusion : cela veut dire que les 2 connexions sont mélangées .

    J'ai passé 3h a debugger et a faire des tests hier, les résultats obtenus sont assez hallucinants ...


    1er test (Test qui est decrit ci dessus)

    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
    25
    26
    27
    28
    29
    30
    31
     
    <?php
     
    $c_client = OCIPLogon($schema1, $passClient, $_ENV["ORACLE_SID"]);	
    echo "c_client: ".$c_client."<br/>";
     
    //tableau des projets sur lesquels on va se connecter
    $aSchema=array("Projet1","Projet2","Projet3");
    for($i=0;$i<3;$i++)
    {
            //nom du projet (nom de la base)
    	$strSchemaName=$aSchema[$i];
    	echo "$strSchemaName<BR>";
     
    	$strFilter="select * from d_product";
            $stmt = OCIParse($c_client,$strFilter);
            OCIExecute($stmt, OCI_DEFAULT);
            OCIFetchStatement($stmt, $arrayProductInfos);
    	OCIFreeStatement($stmt);
     
    	$c_projet = OCIPLogon($schema, $pass, $_ENV["ORACLE_SID"]);
    	echo "c_projet: ".$c_projet."<br/>";
     
    	$strFilter="select * from d_product";
            $stmt = OCIParse($c_client,$strFilter);
            OCIExecute($stmt, OCI_DEFAULT);
            OCIFetchStatement($stmt, $arrayProductInfos);
    	OCIFreeStatement($stmt);
    }
     
    ?>
    Ce test ne fonctionne pas : ociexecute(): OCIStmtExecute: ORA-00942: Table ou vue inexistante .
    Le plus étrange, c que le bug est aleatoire, c a d qu'il ne plante pas tout le temps des le 1er passage dans la boucle.
    Il va meme parfois reussir a faire les 3 itérations.
    C fou !!

    2ième test


    Dans ce test, j'initialise d'abord mes 2 connexions, en 1er une connexion a la supervision, en 2ieme, une connexion sur un projet.
    Ensuite seulement, je fais une requete sur le projet, et une requete sur la supervision.

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    <?php
    $strSchemaPwd=$_SESSION['sesOraPwd_client'];
     
    $c_client = OCIPLogon($schema1, $passClient, $_ENV["ORACLE_SID"]);	
    echo "c_client: ".$c_client."<br/>";
     
     
    $aSchema=array("Projet1","Projet2","Projet3");
    for($i=0;$i<3;$i++)
    {
    	$c_client = OCIPLogon($schema1, $passClient, $_ENV["ORACLE_SID"]); $_SESSION["sesOraPwd_client"]);	
    	echo "c_client: ".$c_client."<br/>";
     
    	$c_projet = OCIPLogon($schema, $pass, $_ENV["ORACLE_SID"]);
    	echo "c_projet: ".$c_projet."<br/>";
     
    	$strSchemaName=$aSchema[$i];
    	echo "$strSchemaName<BR>";
     
    	$strFilter="select * from d_module";
            $stmt = OCIParse($c_projet,$strFilter);
            OCIExecute($stmt, OCI_DEFAULT);
            OCIFetchStatement($stmt, $arrayProductInfos);
    	OCIFreeStatement($stmt);
     
     
     
    	$strFilter="select * from d_product";
            $stmt = OCIParse($c_client,$strFilter);
            OCIExecute($stmt, OCI_DEFAULT);
            OCIFetchStatement($stmt, $arrayProductInfos);
    	OCIFreeStatement($stmt);
    }
     
     
    ?>

    Ce test fonctionne !
    Autrement dit, en faisant l'ordre Connexion - connexion - requete-requete, les 2 connexions ne se mélangent pas .

    3ième test


    Ce test met en evidence la seul solution que j'ai trouvé, cad que je reinitialise ma connexion a la supervision apres la connexion sur le projet. (pour lui dire "et au fait, la supervision c ca !! )

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
     
    <?php
     
    $strSchemaPwd=$_SESSION['sesOraPwd_client'];
     
    $c_client = OCIPLogon($schema1, $passClient, $_ENV["ORACLE_SID"]);		
    echo "c_client: ".$c_client."<br/>";
     
     
    $aSchema=array("Projet1","Projet2","Projet3");
    for($i=0;$i<3;$i++)
    {
     
    	$strSchemaName=$aSchema[$i];
    	echo "$strSchemaName<BR>";
     
    	$strFilter="select * from d_product";
            $stmt = OCIParse($c_client,$strFilter);
            OCIExecute($stmt, OCI_DEFAULT);
            OCIFetchStatement($stmt, $arrayProductInfos);
    	OCIFreeStatement($stmt);
     
    	$c_projet = OCIPLogon($schema, $pass, $_ENV["ORACLE_SID"]);
    	echo "c_projet: ".$c_projet."<br/>";
     
    	$c_client = OCIPLogon($schema1, $passClient, $_ENV["ORACLE_SID"]); $_SESSION["sesOraPwd_client"]);	
    	echo "c_client: ".$c_client."<br/>";
     
     
    	$strFilter="select * from d_product";
            $stmt = OCIParse($c_client,$strFilter);
            OCIExecute($stmt, OCI_DEFAULT);
            OCIFetchStatement($stmt, $arrayProductInfos);
    	OCIFreeStatement($stmt);
    }
     
     
    ?>

    Voila, j'ai regardé sur php.net, j'ai trouvé une fonction qui me paraissait interessante : OCIPLogon.
    C en fait une connexion persistante, je pensais que ca ferait l'affaire, donc dans ma fonction openOracle j'utilise OCIPLogon. --> pas mieux ...


    Voila, j'espere que vous avez compris mon probleme.
    Avez vous deja rencontré des pbs de connexions oracles en php, les avez vous resolues ?

    Je vous remercie d'avance pour vos réponses !

    @+.

  2. #2
    Membre habitué Avatar de scorpking
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    232
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 232
    Points : 181
    Points
    181
    Par défaut
    j'ai pas tout lu sur tes test
    mais tu voudrai fournir des information a la base projet depuis la base supervision
    moi je te proposerai un truc
    tu te connecte a ta premiere base, tu y prend les renseignement et tu libere la base
    tes renseignement mis sous forme de variable sont gardé dans php
    ensuite tu ouvre la connection a l'autre base et tu y met tes informations
    oracle a toujour eu un défault au niveau des doubles connection j'ai souvent lu ça sur internet donc ça pourai venir de là l'erreur

  3. #3
    Membre du Club
    Inscrit en
    Décembre 2003
    Messages
    223
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 223
    Points : 58
    Points
    58
    Par défaut
    Citation Envoyé par scorpking
    mais tu voudrai fournir des information a la base projet depuis la base supervision

    Nan.
    Dans une boucle, j'ai besoin d'information sur la base supervision, ensuite j'ai besoin d'infos sur la base projet.
    Ensuite, j'ai de nouveau besoin d'infos sur la base supervision (plus possible car la connexion est ecrasée par la connexion sur le projet).
    Cet ordre ne peut pas etre changé

    Citation Envoyé par scorpking
    moi je te proposerai un truc
    tu te connecte a ta premiere base, tu y prend les renseignement et tu libere la base
    tes renseignement mis sous forme de variable sont gardé dans php
    ensuite tu ouvre la connection a l'autre base et tu y met tes informations
    Ce n'est pas ca que je veux ...

    Citation Envoyé par scorpking
    oracle a toujour eu un défault au niveau des doubles connection j'ai souvent lu ça sur internet donc ça pourai venir de là l'erreur
    Jpense plus que c un bug de php ...
    Tu aurais dex exemples, des liens ... stp ??

    En tout cas merci !

  4. #4
    Membre habitué Avatar de scorpking
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    232
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 232
    Points : 181
    Points
    181
    Par défaut
    c'est des lien que j'ai trouvé par hazard j'avais pas fais très attentions cherche vir sur google mysql se detache de oracle ils racontaient que oracle avait acheter une partie de programme qdont se servait mysql et comment mysql avait ratrapé le tir puis ils ajoutaient que mysql avait l'avantage de supporter les connections multiple ce que oracle nacceptait pas ou quelquechose dans le genre.

    oui donc j'avais mal compris ce que tu voulais.
    si tu fais une boucle c'est pareille tu peux faire varier la connection tu peux meme te creer des classes connections pour simplifier ton code et comme php fonctionne avec des variable ça ne poserai aucun problème ainsi tu tes informations et la connection reste propre.

  5. #5
    Membre du Club
    Inscrit en
    Décembre 2003
    Messages
    223
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 223
    Points : 58
    Points
    58
    Par défaut
    Yo !

    Bon, ben nouvelles solution :

    A chaque fois qu'on a besoin d'une requete
    Ouvrir une connexion, faire la requete, et fermer la connexion dans l'ordre .

    Ceci donne l'algo suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Pour i de 0 a NbProjets
      connexion supervision
      requete supervision
      fermeture
      connexion projet
      requete projet
      fermeture
      connexion supervision 2
      requete supervision 2
      fermeture 2
    Fin Pour
    Mais faut avouer que c qd meme tres spe tout ca, si qqn a plus d'infos je suis preneur !

    @+ et merci !

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

Discussions similaires

  1. Problème configuration : connexions simultanées
    Par chalumea dans le forum Installation
    Réponses: 0
    Dernier message: 28/07/2009, 12h25
  2. J'ai un problème de connexion sur différente base de donnée
    Par sinifer dans le forum Développement
    Réponses: 0
    Dernier message: 18/05/2009, 11h58
  3. Problème connexion simultanée à la base
    Par Little_flower dans le forum Access
    Réponses: 2
    Dernier message: 07/08/2008, 12h25
  4. problème de connexion simultanée à 2 BDD oracle
    Par paradeofphp dans le forum Connexions aux bases de données
    Réponses: 13
    Dernier message: 07/06/2007, 16h36
  5. [Tomcat]Problème de connexion simultanée en JSP/Tomcat
    Par shingo dans le forum Tomcat et TomEE
    Réponses: 11
    Dernier message: 09/01/2006, 10h00

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