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 :

Warning: mysql fetch array()


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 47
    Points : 16
    Points
    16
    Par défaut Warning: mysql fetch array()
    Bonjour,

    Je reçois par intermittence le message d'erreur suivant:
    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in E:\wamp\www\PHA\travaux.php on line....
    Certains sont récurrent, mais la plupart du temps il suffit que je me déconnecte/reconnecte sur le site (que je créé, en toute modestie), pour ne plus voir apparaître certains de ces WARNINGs...

    Un exemple d'erreur qui revient régulierement avec mon code suivant:
    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
    /Récupération du titre du programme
    $prg="SELECT * FROM ph_programme WHERE id_prg='".$_SESSION['IDprogramme']."'";
    $retour_prg = mysql_query($prg);
    $nom_prg = mysql_fetch_array($retour_prg);
     
    //Récupération de la table Permis
    $permis="SELECT * FROM ph_permis WHERE id_prg='".$_SESSION['IDprogramme']."'";
    $retour = mysql_query($permis);
    $donnees1 = mysql_fetch_array($retour);
     
    //Récupération de la table Travaux
    $tw="SELECT * FROM ph_tw WHERE id_prg='".$_SESSION['IDprogramme']."'";
    $retour_tw = mysql_query($tw);
    $donnees2 = mysql_fetch_array($retour_tw);
     
    //Récupération de la table Construction
    $cst="SELECT * FROM ph_construct WHERE id_prg='".$_SESSION['IDprogramme']."'";
    $retour_cst = mysql_query($cst);
    $donnees3 = mysql_fetch_array($retour_cst);
    L'erreur parle de la ligne 28 qui dans mon code se trouve être la requête sur la table Permis (dans ma citation).
    Pourtant c'est le même code, même base, et je me connecte grace à un script appelé (je crois) en début de page:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    require_once('connexion.php');
    session_start();
    Normalement la syntaxe de ma requête est correcte.
    Peut être ai-je un problème de connexion avec ma base (faut-il une connexion pour chaque page, ca risque d'être pesant en charge de travail, non?).


    Merci par avance de toute aide qui pourrait être partagée.
    Kh.

  2. #2
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Saluton,
    L'avertissement (Warning) provient de PHP qui dit que la ressource $retour ne peut être parcourue, la plupart du temps parce que la requête censée l'alimenter a échoué.
    Que te conseiller, si ton site tourne sous PHP 5, passe à PDO et configure correctement le mode gestion des erreurs pour récupérer des exceptions.

    Sinon, il te faut tester mysql_query() et gérer en fonction du retour.

    Bref, tout cela ne concerne pas directement MySQL, or nous sommes sur un forum MySQL.

    Au passage, à lire impérativement : La guerre des étoiles

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 47
    Points : 16
    Points
    16
    Par défaut
    Autant pour moi,

    Concernant tes conseils, ca me parle pas trop, jsuis un peu (beaucoup) débutant.
    J'ai lu "la guerre des étoiles", je pensais peaufiner après...mais je conçois qu'il vaille mieux prendre les bonnes habitudes dès le début.

    Merci

  4. #4
    Expert éminent sénior
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 803
    Points : 34 071
    Points
    34 071
    Billets dans le blog
    14
    Par défaut
    Un détail en passant : si id_prg est, comme il se devrait pour tout id, de type entier, inutile de mettre entre ' les variables de session.

    Met un echo de la requête réellement envoyée au serveur avant chaque exécution de query et exécute les à la main dans phpMyAdmin pour voir ce qu'elles donnent.

    Autre bonne pratique classique : toujours mettre un or die(mysql_error()) derrière une instruction mysql_query.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 47
    Points : 16
    Points
    16
    Par défaut
    Bonjour,

    Je pense à un problème avec wamp ou simplement Mysql car je reçois les messages de façon irrégulière.
    A un moment T ma page se charge correctement, sans messages quelconques.
    Quelques minutes après, sur la même page, après un F5 je reçois le fameux:

    Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in E:\wamp\www\PHA\travaux.php on line 56
    Grâce à or die (mysqlerror()), j'ai cette info:
    Pourtant sur chaque page j'ai:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    require_once('connexion.php');
    session_start();
    Contenue ma page connexion.php:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $hostname_pha = "localhost";
    $database_pha = "pha"; 
    $username_pha = "root"; 
    $password_pha = "*****"; 
    $pha = mysql_pconnect($hostname_pha, $username_pha, $password_pha) or trigger_error(mysql_error(),E_USER_ERROR);
    Je comprends pas, comment je peux régler ce problème?

    Merci

  6. #6
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Salut,
    tu dois choisir la base après la connexion:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $db = mysql_select_db($database_pha, $pha);

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 47
    Points : 16
    Points
    16
    Par défaut
    Je fais la sélection dans mon script connexion.php ou dois-je le mettre dans chaque requête, comme j'ai l'habitude de le lire sur plusieurs sites...

    Ca ne va pas être consommateur de ressource dans le cas d'une connexion à chaque requête?

  8. #8
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Mets le une seul fois dans connexion.php après la connexion.

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 47
    Points : 16
    Points
    16
    Par défaut
    Merci pour le conseil, j'ai fais comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $hostname_pha = "localhost";
    $database_pha = "pha"; 
    $username_pha = "root"; 
    $password_pha = "*****"; 
    $pha = mysql_pconnect($hostname_pha, $username_pha, $password_pha) or trigger_error(mysql_error(),E_USER_ERROR);
    $db = mysql_select_db($database_pha, $pha);
    Je reviens vers vous pour un feedback.

  10. #10
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 798
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 798
    Points : 5 591
    Points
    5 591
    Par défaut
    Peut-être tout simplement la connexion qui ne fonctionne pas. Généralement en local il n'y a pas de mot de passe.

    Essaie de mettre un OR DIE derrière ta connexion

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 47
    Points : 16
    Points
    16
    Par défaut
    Bonjour, et merci pour ta réponse.

    On m'a dit précédemment de faire comme tu le dis à juste titre.
    Seulement, depuis que j'ai mis le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $db = mysql_select_db($database_pha, $pha);
    dans le script de ma page connexion.php, je ne reçois le message en question que lorsque je fais une erreur dans la rédaction de mes requêtes...

    Mais je ne suis à l'abri de rien.

    Pour le local ou pas, c'est juste pour la partie dev que je fait ça en local, l'ensemble de mon projet est destiné à être hébergé et donc nécessite un password sur la DB.

Discussions similaires

  1. [MySQL] mysql fetch array
    Par wattaroo dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 10/10/2010, 17h34
  2. [MySQL] mysql fetch array
    Par kimikimi dans le forum PHP & Base de données
    Réponses: 22
    Dernier message: 20/08/2010, 13h47
  3. [MySQL] Warning: mysql fetch array
    Par pi-2r dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 28/02/2010, 23h40
  4. [MySQL] Problème mysql fetch array
    Par qeenty dans le forum PHP & Base de données
    Réponses: 19
    Dernier message: 29/01/2010, 18h36
  5. probleme avec mysql fetch array
    Par philsand77 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 19/04/2007, 08h56

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