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 :

Récuperer résultat mysql dans tableau


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Inscrit en
    Octobre 2011
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 15
    Points : 8
    Points
    8
    Par défaut Récuperer résultat mysql dans tableau
    Bonjour, j'ai un souci sur cette requete, elle fonctionne correctement sur mon serveur de dev mais ne retourne aucune info sur le serveur de production :
    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
     
    function channel_allocation($country)
        {
            include 'db_connection.php';
     
            // **************************************************
            // Premiere requete
            // **************************************************
            $request =' SELECT country_ch_lmt 
                        FROM country
                        WHERE country_name=\''.$country.'\'';
            $answer = $bdd->query($request);      
            while ($data = $answer->fetch())
                {
                    $channel_limit=$data['country_ch_lmt'];
                }                
            $answer->closeCursor();
     
            // **************************************************
            // Deuxieme requete
            // **************************************************
     
            $request =' SELECT channel_nbr, channel_fq 
                        FROM channel
                        WHERE channel_nbr<=\''.$channel_limit.'\'';
            $answer = $bdd->query($request);
            $array_channel=array();        
            while ($data = $answer->fetch())
                {
                   $array_channel[$data['channel_nbr']]=$data['channel_fq'];
                }        
            $answer->closeCursor();
            return ($array_channel);        
        }
    Je récupère correctement le résultat de la première requête dans la variable $channel_limit . Mais je ne récupère rien du tout dans la seconde.... Pourtant les infos sont bien présentes en BDD.
    Quelqu'un aurait une idée ?

  2. #2
    Membre du Club
    Femme Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 26
    Points : 51
    Points
    51
    Par défaut
    T'as essayé d'afficher ta seconde requête et de l’exécuter directement dans le phpMyAdmin?

  3. #3
    Futur Membre du Club
    Inscrit en
    Octobre 2011
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    Oui, j'ai bien le résultat désiré en passant par phpmyadmin.
    Je me demande si ce n'est pas du à ma méthode pour passer les résultat sous forme de tableau

  4. #4
    Membre du Club
    Femme Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 26
    Points : 51
    Points
    51
    Par défaut
    et si tu lui demandes d'afficher $data['channel_nbr'] ou $data['channel_fq'] dans la boucle il le fait?

  5. #5
    Futur Membre du Club
    Inscrit en
    Octobre 2011
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    Non, rien ne s'execute dans cette boucle
    Cependant, j'ai déplacé la 2e requete dans une autre fonction et ca passe !
    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
    function channel_limit($country)
        {
            include 'db_connection.php';      
            $request =' SELECT country_ch_lmt 
                        FROM country
                        WHERE country_name=\''.$country.'\'';
            $answer = $bdd->query($request);      
            while ($data = $answer->fetch())
                {
                    $channel_limit=$data['country_ch_lmt'];
                }                
            $answer->closeCursor();
            return ($channel_limit);
        }  
     
     
    function channel_list($channel_limit)
        {
        include 'db_connection.php';    
        $request =' SELECT channel_nbr, channel_fq 
                        FROM channel
                        WHERE channel_nbr<=\''.$channel_limit.'\'';
            echo 'requete : '.$request.'<br>';
            $answer = $bdd->query($request);
            $array_channel=array();        
            while ($data = $answer->fetch())
                {
                   $array_channel[$data['channel_nbr']]=$data['channel_fq'];
                }        
            $answer->closeCursor();
            return ($array_channel);        
        }
    Ça doit être les valeurs de mes variables de la première requête MySQL qui doivent gêner pour exécuter la seconde

  6. #6
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    Active la gestion des erreurs de Php (display_errors à ON) si ce n'est pas le cas, car s'il y a une erreur de Php, tu auras au moins un message, donc une piste.


    Essai de mettre ceci en commentaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    //$answer->closeCursor();
    Juste après la 1ère requête, voire même les 2.
    Théoriquement MySQL n'a pas besoin qu'on lui dise de fermer la connexion, c'est gérer automatiquement, en plus ce serait plus rapide.


    Il y a des petits trucs qui à mon sens peuvent s'améliorer dans ton code.

    Tu fais une boucle sur la 1ère requête, or, si chaque country_name est unique (ce qui me semble le cas), alors on peu avoir 2 cas possible :
    -> Soit aucun résultat, car la valeur de $country ne correspondrait à aucun country_name
    -> Soit 1 seul résultat
    (mais jamais plus d'1 résultat).
    Dans ces conditions faire une boucle ne sert à rien.


    En admettant maintenant que dans cette table country il peu avoir plusieurs valeurs identiques de country_name (peu probable à mon sens), alors faire une boucle devient nécessaire, mais cette ligne comporte alors une erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $channel_limit=$data['country_ch_lmt'];
    Car la valeur de $channel_limit aura obligatoirement celle du dernier élément de $data.
    La valeur de $channel_limit serait en faite "écrasée" à chaque tour de boucle.

    Donc dans tous les cas il y a une correction à faire sur cette 1ère requête.


    Je poursuis.
    Si chaque ligne/valeur de country_name est unique (ce qui me semble le cas là encore), alors tu devrais pouvoir faire tout ça en une seule requête SQL, suffit de faire une jointure entre ces 2 tables "country" et "channel", et par relation de "country_ch_lmt" et channel_nbr.


    Tout ça sauf erreur bien sûr.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  7. #7
    Futur Membre du Club
    Inscrit en
    Octobre 2011
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    Pour répondre à ta question, dans la table COUNTRY, coutry_name est bien unique.
    J'ai fait selon ton idée, j'ai nettoyé un peu tout ça et effectué une jointure de table comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function channel_allocation($country)
        {
            include 'db_connection.php';        
            $request =  'SELECT c.channel_nbr, c.channel_fq
                FROM channel c
                JOIN country y
                ON c.channel_nbr<=y.country_ch_lmt
                WHERE y.country_name=\''.$country.'\'';
            $answer = $bdd->query($request);
            while ($data = $answer->fetch())
            {
                $array_channel[$data['channel_nbr']]=$data['channel_fq'];
            }
            return ($array_channel);
    La requête passe sans problème

  8. #8
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    La requête passe sans problème
    Très bien.

    Attention au piège cependant.
    Si on revient au tout début, apparemment, lorsque que tu faisait la 1ère requête, tu n'avais pas d'erreur, mais pour la deuxième, tu n'obtenais rien (c'était ça le problème).

    Finalement, on a pas la certitude que c'était la ligne du closeCursor qui provoquais cette erreur.
    Il y a alors une sorte d'inconnue finalement.

    Pour ma part, je tenterais, ne serait-ce que provisoirement de refaire exactement la même chose qu'auparavant, soit les 2 requêtes.

    - Une fois avec le closeCursor, là tu devrais obtenir la même erreur.
    - Une 2ème fois sans closeCursor.

    Et là, 2 cas possibles :
    -> soit tu n'auras plus cette erreur (en vérifier que la 2ème requête renvoie bien quelque chose).
    On peu conclure que c'est le closeCursor qui est à l'origine de l'erreur.
    Tant mieux.

    -> soit l'erreur est toujours présente.
    Le closeCursor n'est pas l'origine de cette erreur (le piège en question).
    Il faudrait alors prospecter un peu plus. Activer la gestion des erreurs Php pourrait aider à mieux comprendre.


    Vois tu où je veux en venir ?
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

Discussions similaires

  1. Résultat MySQL dans une variable
    Par schranz dans le forum Shell et commandes GNU
    Réponses: 22
    Dernier message: 20/08/2014, 16h47
  2. Réponses: 0
    Dernier message: 13/05/2013, 14h35
  3. [PHP 5.0] Copier le résultat d'une requête mysql dans un autre tableau PHP
    Par Didier100 dans le forum Langage
    Réponses: 6
    Dernier message: 30/05/2012, 23h59
  4. Réponses: 1
    Dernier message: 05/11/2009, 19h14
  5. Récuperer donnée MySQL dans une cellule
    Par me-to-you93 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/02/2008, 12h58

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