Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/12/2011, 14h57   #1
Invité de passage
 
Inscription : octobre 2011
Messages : 15
Détails du profil
Informations forums :
Inscription : octobre 2011
Messages : 15
Points : 1
Points : 1
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 :
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 ?
benderR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2011, 15h06   #2
Membre du Club
 
Femme Adeline
Consultant informatique
Inscription : décembre 2011
Messages : 20
Détails du profil
Informations personnelles :
Nom : Femme Adeline
Âge : 30
Localisation : France, Oise (Picardie)

Informations professionnelles :
Activité : Consultant informatique

Informations forums :
Inscription : décembre 2011
Messages : 20
Points : 44
Points : 44
T'as essayé d'afficher ta seconde requête et de l’exécuter directement dans le phpMyAdmin?
PtiteA2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2011, 15h09   #3
Invité de passage
 
Inscription : octobre 2011
Messages : 15
Détails du profil
Informations forums :
Inscription : octobre 2011
Messages : 15
Points : 1
Points : 1
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
benderR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2011, 15h14   #4
Membre du Club
 
Femme Adeline
Consultant informatique
Inscription : décembre 2011
Messages : 20
Détails du profil
Informations personnelles :
Nom : Femme Adeline
Âge : 30
Localisation : France, Oise (Picardie)

Informations professionnelles :
Activité : Consultant informatique

Informations forums :
Inscription : décembre 2011
Messages : 20
Points : 44
Points : 44
et si tu lui demandes d'afficher $data['channel_nbr'] ou $data['channel_fq'] dans la boucle il le fait?
PtiteA2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2011, 15h32   #5
Invité de passage
 
Inscription : octobre 2011
Messages : 15
Détails du profil
Informations forums :
Inscription : octobre 2011
Messages : 15
Points : 1
Points : 1
Non, rien ne s'execute dans cette boucle
Cependant, j'ai déplacé la 2e requete dans une autre fonction et ca passe !
Code :
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
benderR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2011, 15h39   #6
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 728
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 728
Points : 3 295
Points : 3 295
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 :
//$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 :
$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]
RunCodePhp est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2011, 16h22   #7
Invité de passage
 
Inscription : octobre 2011
Messages : 15
Détails du profil
Informations forums :
Inscription : octobre 2011
Messages : 15
Points : 1
Points : 1
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 :
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
benderR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2011, 19h44   #8
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 728
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 728
Points : 3 295
Points : 3 295
Citation:
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]
RunCodePhp est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h33.


 
 
 
 
Partenaires

Hébergement Web