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 :

Problème avec une requête (guillemets ?) [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Problème avec une requête (guillemets ?)
    Bonjour,
    J'ai rencontré un soucis en voulant récupérer des données sur ma base de données (chez Free).

    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    mysql_connect("sql.free.fr", "base", "*****") or die(mysql_error());
    mysql_select_db("base") or die(mysql_error());
    $util=$user->data['username']; /* Provient d'un forum phpBB3 */
    $requete = mysql_query("SELECT * FROM site_perso WHERE us=\"$util\"") or die(mysql_error());
     
    while($data = mysql_fetch_array($requete)) {
       echo $data['personnage'];
       echo $data['lvl_perso'];
       echo $data['metier1'];
    }
     
    mysql_close();
    Et là, rien ne se passe, alors que j'ai quand même des données dans la table "site_perso".

    Je me suis dit, pourquoi je ne tenterai pas de tester ma requête (je ne sais pas si ça se fait) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    if (!mysql_fetch_array($requete)) {
       echo "FALSE";
    }
     
    if (mysql_fetch_array($requete)) {
       echo "TRUE";
    }
    Et là, rien ne s'affiche.

    Est-ce un problème de guillemets ?
    Merci d'avance

  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
    Par défaut
    Saluton,
    Bonne illustration du problème de posé par l'emploi systématique de SELECT *.
    Comment pouvons-nous savoir si personnage, vl_perso et metier1 sont bien des noms de colonnes de la table site_perso ?

    Quant à ton test sur mysql_fetch_array, c'est carrément du n'importe quoi.
    Teste mysql_num_rows($requete) et vois commbien de lignes sont retournées.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  3. #3
    Invité
    Invité(e)
    Par défaut
    En fait, je veux tout sélectionner, donc j'ai utilisé SELECT *.

    Ce qui suit, c'est pour voir si les bonnes données allaient s'afficher.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    echo $data['personnage'];
    echo $data['lvl_perso'];
    echo $data['metier1'];
    J'ai testé mysql_num_rows($requete) et j'obtiens 1. Et effectivement, j'ai bien une seule ligne qui correspond à us=$util.

    Merci

  4. #4
    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
    Par défaut
    Citation Envoyé par Adenora Voir le message
    En fait, je veux tout sélectionner, donc j'ai utilisé SELECT *.

    Ce qui suit, c'est pour voir si les bonnes données allaient s'afficher.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    echo $data['personnage'];
    echo $data['lvl_perso'];
    echo $data['metier1'];
    J'ai testé mysql_num_rows($requete) et j'obtiens 1. Et effectivement, j'ai bien une seule ligne qui correspond à us=$util.

    Merci
    A lire :http://www.expreg.com/fred_article.p...re_des_etoiles
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  5. #5
    Invité
    Invité(e)
    Par défaut
    Je suis tout à fait d'accord avec l'article. Pourquoi on n'apprend pas ça en cours ?

    Sinon, ça ne résout pas mon problème.
    J'ai beau changé l'étoile par "personnage" par exemple, ça ne fait rien.

  6. #6
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 815
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 815
    Billets dans le blog
    14
    Par défaut
    Et si tu exécutes la requête directement dans phpMyAdmin en donnant une valeur existante à $util, ça donne quoi ?

    Sinon je conseille toujours de procéder en plusieurs étapes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $requete = "SELECT * FROM site_perso WHERE us=\"$util\"";
    $resultat = mysql_query($requete) OR die(mysql_error());
     
    while($data = mysql_fetch_array($resultat))
    Ainsi, c'est plus facile à débugger ensuite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $requete = "SELECT * FROM site_perso WHERE us=\"$util\"";
    echo "<br />Requête :<br/>$requete";
    exit;
    Ensuite tu vois la requête réellement générée par le code et tu peux l'exécuter dans phpMyAdmin pour voir ce qu'elle retourne comme résultat.

    Encore une chose :
    Fais plutôt ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $requete = "SELECT * FROM site_perso WHERE us= '$util' ";
    Et si la colonne us est de type numérique, enlève carrément les ' qui sont inutiles.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

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

Discussions similaires

  1. [TADOQuery] Problème avec une requête
    Par yannba dans le forum Bases de données
    Réponses: 2
    Dernier message: 20/01/2006, 13h51
  2. Problème avec une requête
    Par demonark dans le forum Langage SQL
    Réponses: 3
    Dernier message: 19/09/2005, 05h35
  3. Problème avec une requête
    Par ringostarr dans le forum Langage SQL
    Réponses: 5
    Dernier message: 19/04/2005, 20h34
  4. Problème avec une requête
    Par snoopy69 dans le forum Débuter
    Réponses: 2
    Dernier message: 20/01/2005, 12h39
  5. problème avec une requête imbriquée
    Par jaimepasteevy dans le forum Langage SQL
    Réponses: 13
    Dernier message: 05/12/2003, 10h29

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