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

Langage PHP Discussion :

Problème avec closeCursor() dans les boucles


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 18
    Points : 20
    Points
    20
    Par défaut Problème avec closeCursor() dans les boucles
    Bonjour,

    Voilà, je me suis remis au PHP après pas mal de mois sans pratiquer et je me suis rendu compte sur le SdZ (concurrence concurrence ^^) que ce dernier conseille de ne plus utiliser les commandes mysql_ mais l'extension PDO.
    Cependant, je n'arrive pas à comprendre comment il est possible avec cette extension de gérer plusieurs requêtes en même temps (à cause du closeCursor()).

    En effet, je cherche à afficher une liste d'édifices stockée dans une BDD. Je crée donc une boucle qui me liste toutes les entrées de ma table Edifices. Néanmoins, toutes les infos de chaque édifice ne sont pas conservées dans une même table. Je suis donc obliger de faire d'autres requêtes à l'intérieur même de la boucle pour aller chercher le nom de l'édifice par exemple.

    Or, je ne peux si j'ai bien compris mettre le closeCursor() de la première requête (celle qui gère le while) qu'après la fin de celui-ci. Alors comment puis-je faire pour effectuer les requêtes à l'intérieur de la boucle ? La question vaut d'ailleurs également pour des emboitements de conditions où l'on cumule les requêtes.

    D'avance merci pour votre aide.
    M.K.P

    P.S. :
    Voici mon code :
    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    $Edifices = $bdd->query('SELECT ZKP, INF_DateEdification FROM Edifices');
        while ($Edifice = $Edifices->fetch())
        {
            $ZKP = $Edifice['ZKP']; //Selection de l'index de l'edifice (ZKP)
            $DateEdification = $Edifice['INF_DateEdification']; //Selection de la date d'edification de l'edifice
            //----------
            //Gestion du Nom
            //-----------
            $NomEtape = $bdd1->query('SELECT COUNT(*) AS NbNoms FROM EdificesNoms WHERE ZKF_Edifices=\''.$ZKP.'\''); //On compte le nombre de noms de l'édifice
                if($NomEtape['NbNoms'] == 0) //Si aucun nom dans la base, on renvoie une valeur nulle
                {
                    $NomFinal = 'Aucun nom connu';
                }
                else //Sinon, on liste les noms par ordre du zkp et on prend le premier
                {
                    $EdificesNoms = $bdd2->query('SELECT INF_Nom FROM EdificesNoms WHERE ZKF_Edifices=\''.$ZKP.'\' ORDER BY ZKP  LIMIT 0, 0');
                    $NomFinal = $EdificesNoms['INF_Nom'];
                }
            //-------------
     
            //----------
            //Gestion du Nom de l'Architecte
            //-----------
            $ArchitecteEtape = $bdd3->query('SELECT COUNT(*) AS NbArchitectes FROM Z_Edifices_Personnes WHERE ZKF_Edifices=\''.$ZKP.'\''); //On compte le nombre d'architectes de l'édifice
                if($NomEtape['NbNoms'] == 0) //Si aucun architecte connu, on renvoie une valeur nulle
                {
                    $NomFinal = 'Pas d\'architecte';
                }
                else //Sinon, on liste les architectes par ordre du zkp et on prend le premier
                {
                    $EdificesArchitectesID = $bdd4->query('SELECT ZKF_Personnes FROM Z_Edifices_Personnes WHERE ZKF_Edifices=\''.$ZKP.'\' LIMIT 0, 0');
                    $ArchitecteID = $EdificesArchitectesID['ZKF_Personnes'];
                    //On récupère le nom de l'architecte
                    $ArchitecteNomComposants = $bdd5->query('SELECT NOM_Prenom, NOM_Nom FROM Personnes WHERE ZKP=\''.$ArchitecteID.'\'');
                    $ArchitecteNom = $ArchitecteNomComposants['NOM_Prenom'].' '.strtoupper($ArchitecteNomComposants['NOM_Nom']); //Nom complet = prenom + nom en majuscule    
                }
            //-----------
     
            //-------------------
            //Construction de la ligne du tableau :
            //-------------------
            echo '<tr>
                    <td><center>'.$ZKP.'</center></td>
                    <td><center>'.$NomFinal.'</center></td>
                    <td><center>'.$ArchitecteNom.'</center></td>
                    <td><center>'.$DateEdification.'</center></td>
                  </tr>';
        }
        $Edifices->closeCursor();

  2. #2
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 146
    Points : 9 386
    Points
    9 386
    Par défaut
    C'est indiqué en première phrase de la documentation.
    PDOStatement::closeCursor() frees up the connection to the server so that other SQL statements may be issued, but leaves the statement in a state that enables it to be executed again.
    En gros c'est à utiliser entre deux requêtes, mais cela ne gêne pas la poursuite du premier jeu de données récupéré.

    « Toujours se souvenir que la majorité des ennuis viennent de l'espace occupé entre la chaise et l'écran de l'ordinateur. »
    « Le watchdog aboie, les tests passent »

Discussions similaires

  1. [XL-2007] Problème avec If dans une boucle
    Par Runsh63 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 23/06/2011, 08h48
  2. Réponses: 12
    Dernier message: 24/09/2010, 00h08
  3. problème avec "formatString" dans les balises xml
    Par k750_b dans le forum Alimentation
    Réponses: 0
    Dernier message: 17/06/2008, 11h04
  4. Problème avec boutons dans une boucle
    Par CHAP26 dans le forum Flash
    Réponses: 2
    Dernier message: 03/06/2008, 14h28
  5. Problème avec TNMSMTP dans une boucle.
    Par Orgied dans le forum Web & réseau
    Réponses: 3
    Dernier message: 07/04/2004, 10h19

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