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 :

[Interbase] fonctions iBase_ Query de PHP


Sujet :

PHP & Base de données

  1. #1
    jlf
    jlf est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 140
    Points : 49
    Points
    49
    Par défaut [Interbase] fonctions iBase_ Query de PHP
    bonjour

    j'ai des pbms de compréhension des fonctions iBase_xx de PHP, notemment le résultat de Query
    si quelqu'un voulait m'aider à y voir plus clair ce serait sympa

    voila, supposons que je fasse ça :
    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
     
    <?php
     
    // ouverture
      $db = ibase_connect(maBase, mesParams..);
      $Rows = ibase_query($db, $UneRequeteSelect);
      ibase_close($db);
     
    // affichage 1
      while ($row = ibase_fetch_row($Rows)) {echo des lignes..}
     
    // nouvelle connexion avec mêmes variables
      ibase_free_result($Rows);
      $db = ibase_connect(maBase, mesParams..);
      $Rows = ibase_query($db, $AutreRequeteSelect);
      ibase_close($db);
     
    // affichage 2
      while ($row = ibase_fetch_row($Rows)) { echo des lignes..}
    en premier lieu la partie "Affichage 1" fonctionne bien, malgré le fait que j'aie fermé la connexion à la base en ligne 3

    ça m'étonne car je pensais que le résultat d'un ibase_query (ressource $Rows dans mon cas) devait être liée à la base (que ce n'est pas un objet ou un tableau associatif rempli par l'appel ibase_query)

    il n'en est rien semble t-il puisque "Affichage 1" fonctionne après ibase_close, ou est-ce que chaque ibase_fetch_Row($Rows) rétablit la connexion ?


    en second lieu ma deuxième connexion ci dessus fonctionne apparemment sans erreur, mais la partie "Affichage 2" pas du tout

    le fetch_row renvoie une erreur disant que $Rows n'est pas du type attendu !

    je ne comprends vraiment rien à ce ibase_query
    il renvoit quoi exactement ?

  2. #2
    Membre éclairé
    Avatar de genova
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 487
    Points : 790
    Points
    790
    Par défaut
    ibase_close() ferme, comme son nom l'indique clairement, la connexion à ta base de donnée interbase, donc tu ne peux plus rien faire donc c'est normal que tout bug.

    Utilise ibase_close() a la toute fin de ton script.

  3. #3
    jlf
    jlf est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 140
    Points : 49
    Points
    49
    Par défaut
    ibase_close() ferme, comme son nom l'indique clairement
    c'est ce que je croyais aussi, mais dans ce cas pourquoi les fetch_row fonctionnent quand même dans "affichage 1" ?

    si ibase_query renvoie une ressource SUR la bdd les fetch ne devraient pas marcher, ou alors ibase_query renvoie une ressource indépendante de la bdd

    mais dans ce dernier cas mon "affichage 2" devrait fonctionner or ce n'est pas le cas ?!

  4. #4
    Membre du Club Avatar de pierre987321
    Inscrit en
    Août 2005
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 139
    Points : 62
    Points
    62
    Par défaut ...
    c normale dans ton exemple tu apl les meme truc donc ....
    sa ne p pas marcher !!!!! ne pas pas safficher deux fois de suite


    sinon "elseif"

    voila ++

    ps: "ibase_close()" tjr a la fin

  5. #5
    Membre éclairé
    Avatar de genova
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 487
    Points : 790
    Points
    790
    Par défaut
    Le meilleur shéma est de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ibase_connect();
     
    // ibase_query() 1
     
    // ibase_query() 2
     
    // etc ...
     
    ibase_close();
    pas besoin de te connecter / deconnecter a chaque requète tu perds un temps dingue car sur les SGBD le plus long c'est la connexion

  6. #6
    jlf
    jlf est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 140
    Points : 49
    Points
    49
    Par défaut
    pas besoin de te connecter / deconnecter a chaque requète tu perds un temps dingue car sur les SGBD le plus long c'est la connexion
    outre le temps c'est vrai que si je ne déconnecte pas les deux ibase_query successifs fonctionnent

    mais je suis quasi obligé de déconnecter parce que j'ai mis la gestion bdd dans un objet PHP4
    comme il n'y a pas de destructeurs à ma connaissance (?) si je ne ferme pas après chaque requete je ne saurais jamais quand il faudra le faire

    bien embetant tout ça

    je crois que j'avancerais un peu si je comprenais mieux la ressource renvoyée par ibase_query, par exemple pourquoi fonctionne t-elle encore après un ibase_close ?

  7. #7
    Membre éclairé
    Avatar de genova
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 487
    Points : 790
    Points
    790
    Par défaut
    Ca doit etre assez alétoire la fermeture ne se fait peut etre pas instantanément ce qui laisse le temps a ton ibase_query() de faire des siennes.

    Pour ce qui est de la fermeture il te suffit de faire une méthode close() avec ton ibase_close() dedans non ? Au pire si tu tiens a faire guise de destructeur utile la fonction register_shutdown_function() qui te permet de dire à php d'éxécuter une fonction à la fin du script.

    Par exemple dans ton constructeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    register_shutdown_function(array(&$this, 'database_close'));
    et ta méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function database_close()
    {
       ibase_close($this->id);
    }

  8. #8
    jlf
    jlf est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 140
    Points : 49
    Points
    49
    Par défaut
    Ca doit etre assez alétoire la fermeture ne se fait peut etre pas instantanément
    effectivement c'est une possibilité
    je n'y avais pas pensé
    donc le query renvoie bien une ressource liée à la bdd et pas une copie autonome des données genre array ?


    si tu tiens a faire guise de destructeur utile la fonction register_shutdown_function() qui te permet de dire à php d'éxécuter une fonction à la fin du script.
    je ne suis pas familiarisé à PHP et je n'avais pas repéré cette possibilité, merci beaucoup, elle m'ouvre beaucoup d'horizons

    bien amicalement
    jlf

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 56
    Points : 27
    Points
    27
    Par défaut fonction connexion et deconnexion firebird
    Déslé de réouvrir un vieux poste, mais j'aurai voulu réaliser une fonction de connexion avec une base firebird ainsi qu'une fonction de déconnection.. Au niveau code ca me donne ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function connect_fb($db,$dbuser,$dbpass){
    	$db_fb = ibase_connect($db, $dbuser, $dbpass);
    	if(!$db_fb) die ("Echec de connexion a la base de donnee");
    }
     
    function disconnect_fb(){
    	ibase_close($this->id);
    }
    Le soucis c'est que ca ne marche pas... est ce que quelqu'un aurait une idée ??

    Merci beaucoup

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

Discussions similaires

  1. PHP et interbase : fonctions non reconnues
    Par reeda dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 07/09/2008, 15h27
  2. équivalent fonction mysql C en php
    Par splouf dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 22/01/2006, 19h41
  3. Appeler une fonction d'un script PHP depuis HTML
    Par barthelv dans le forum Langage
    Réponses: 31
    Dernier message: 27/12/2005, 11h25
  4. [SQL-Interbase] Fonction SHOW TABLES
    Par polocfa41 dans le forum InterBase
    Réponses: 4
    Dernier message: 26/04/2005, 11h33
  5. [INTERBASE]Fonction UDF et Duplication ???
    Par Sitting Bull dans le forum InterBase
    Réponses: 6
    Dernier message: 15/12/2003, 08h40

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