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 :

Connaitre le nom des colonnes de ma table [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut Connaitre le nom des colonnes de ma table
    Salut tout le monde,

    Je programme pour la première fois en PHP pour mon travail de fin d'étude.

    J'ai recherché sur le net une fonction qui me permettrait de récupérer le nom des champs d'un certaine table MYSQL.

    J'ai trouvé ceci qui fonctionne bien :

    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
    <?php
    /* Supposons que la table utilisée contienne trois champs :
    *   user_id
    *   username
    *   password.
     */
    $link = @mysql_connect('localhost', 'mysql_user', 'mysql_password');
    if (!$link) {
       die('Impossible de se connecter au serveur MySQL : ' . mysql_error());
    }
    $dbname = 'mydb';
    $db_selected = mysql_select_db($dbname, $link);
    if (!$db_selected) {
       die("Impossible de se connecter à la base $dbname: " . mysql_error());
    }
    $res = mysql_query('select * from users', $link);
     
    echo mysql_field_name($res, 0) . "\n";
    echo mysql_field_name($res, 2);
    ?>
    La seule chose qui me dérangeait, c'est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo mysql_field_name($res, 0) . "\n";
    echo mysql_field_name($res, 2);
    Ce qui ne me convient pas, c'est qu'il faut à la limite connaître le nombre de champ pour l'utiliser alors que le but de mon application est de générer des zones de texte par rapport au nombre de champ de la table.

    J'ai donc essayé de faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while ($row = mysql_field_name($res)) 
    	{
    		echo "{$row[0]}";
    	}
    Mais ça me donne ce message d'erreur :

    Warning: Wrong parameter count for mysql_field_name() in C:\wamp\www\EntreeDeDonnees.php on line 179
    J'ai aussi testé ce 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
    <?php
    $dbname = 'deliberations';
     
    	if
    	 (!mysql_connect('localhost', 'root', 'mdp')) 
    	 {
       		echo 'Impossible de se connecter à MySQL';
       		exit;
    	}
    $result = mysql_query("SHOW COLUMNS FROM $dbname");
    if (!$result) 
    {
       echo 'Impossible d\'exécuter la requête : ' . mysql_error();
       exit;
    }
    if (mysql_num_rows($result) > 0) 
    	{
    	   while ($row = mysql_fetch_assoc($result)) {
    	   print_r($row);
       }
    }
    ?>
    et là, il me dit :

    Impossible d'exécuter la requête : No database selected
    J'en déduis que le problème vient de cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $result = mysql_query("SHOW COLUMNS FROM $dbname");
    Comme je vous l'ai dis, je débute en PHP, ne m'en veuillez donc pas trop

    Merci d'avance pour votre aide très appréciée.

    beegees

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Bonjour et bienvenue dans le monde merveilleux de PHP

    Tu cherches à récupérer les noms des colonnes de ta table, en supposant que tu ne les connais pas (ce qui n'est pas très logique, vu que théoriquement tu connais la structure de tes tables, mais bon admettons..)
    Le plus simple est d'utiliser une requête sql Show Columns (étant que la fonction php qui faisait ceci est maintenant dépréciée)
    Donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $result = mysql_query("SHOW COLUMNS FROM users");
       while ($row = mysql_fetch_assoc($result)) {
          print_r($row);
       }
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Salut,

    Merci pour ta réponse.

    Tu cherches à récupérer les noms des colonnes de ta table, en supposant que tu ne les connais pas (ce qui n'est pas très logique, vu que théoriquement tu connais la structure de tes tables, mais bon admettons..)
    Je veux juste éviter de mettre comme texte brut le nombre de colonne de chaque table dans mon code PHP. Si j'ajoute ou si je supprime un champ, je devrai aller changer la valeur dans mon code, tandis que si il le compte, il aura toujours le bon nombre de table. Je peux bien sûr être tout à fait à côté de la plaque

    J'ai fais un "copy and paste" de ce que tu m'as passé et ça me donne ce message d'erreur :

    Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in C:\wamp\www\EntreeDeDonnees.php on line 167
    la ligne 167 correspond à ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while ($row = mysql_fetch_assoc($result))
    et voici l'entièreté de 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
    <?php
    $dbname = 'deliberations';
     
    	if
    	 (!mysql_connect('localhost', 'root', 'mdp')) 
    	 {
       		echo 'Impossible de se connecter à MySQL';
       		exit;
    	}
    $result = mysql_query("SHOW COLUMNS FROM users");
       while ($row = mysql_fetch_assoc($result)) 
       {
          print_r($row);
       }
     
    ?>
    Si j'ajoute cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(!$result) exit(mysql_error());
    il me dit :

    No database selected
    J'ai pourtant sélectionné une base de données...

    Merci encore pour ton aide très précieuse.

    beegees

  4. #4
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    N'oublie de sélectionner la base que tu utilises par mysql_select_db
    Et sinon, essaye d'ajouter un mysql_error pour récupérer l'erreur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $result = mysql_query("SHOW COLUMNS FROM users") or die (mysql_error());
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  5. #5
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    je viens juste d'éditer mon message précédent en ajoutant un mysql_Error.

    J'ai mis $dbname à la place de users, je pouvais ???

    Merci pour ton aide.

    beegees

  6. #6
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Je viens d'éditer le mien en ajoutant une référence à la sélection de la base
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  7. #7
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Merci pour ton aide.

    Malheureusement, toujours le même message :

    No database selected
    Dois-je laisser users ? ou mettre le nom de ma base ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $result = mysql_query("SHOW COLUMNS FROM users") or die (mysql_error());
    N'oublie de sélectionner la base que tu utilises par mysql_select_db
    Je l'ai maintenant fait, voici mon code à jour :

    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
    <?php
    $dbname = 'deliberations';
     
    	if
    	 (!mysql_connect('localhost', 'root', 'mdp')) 
    	 {
       		echo 'Impossible de se connecter à MySQL';
       		exit;
    	}
     
    	// Rendre la base de données foo, la base courante
    $db_selected = mysql_select_db($dbname, $link);
    if (!$db_selected) {
       die ('Impossible de sélectionner la base de données : ' . mysql_error());
    }
     
    $result = mysql_query("SHOW COLUMNS FROM users") or die (mysql_error());
     
    #if(!$result) exit(mysql_error());
     
       while ($row = mysql_fetch_assoc($result)) 
       {
          print_r($row);
       }
     
    ?>
    Désolé mais dans une semaine, ça ira déjà mieux

    beegees

  8. #8
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Et ça fonctionne maintenant ?

    Bon courage !
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  9. #9
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Non, j'obtiens ces messages d'erreurs :

    Warning: mysql_select_db(): supplied argument is not a valid MySQL-Link resource in C:\wamp\www\EntreeDeDonnees.php on line 168
    et

    Impossible de sélectionner la base de données :
    Mais je commence à comprendre pourquoi :

    Il n'y a pas de $link dans mon code alors qu'il passe un certain $link en paramètre dans :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $db_selected = mysql_select_db($dbname, $link);
    EDIT :

    Voilà, ça avance à grand pas :

    Array ( [Field] => Matricule_Et [Type] => int(6) unsigned zerofill [Null] => NO [Key] => PRI [Default] => [Extra] => ) Array ( [Field] => Nom_Et [Type] => varchar(50) [Null] => NO [Key] => [Default] => [Extra] => ) Array ( [Field] => Prenom_Et [Type] => varchar(50) [Null] => YES [Key] => [Default] => [Extra] => ) Array ( [Field] => Date_de_naissance_Et [Type] => date [Null] => NO [Key] => [Default] => [Extra] => ) Array ( [Field] => Email_Et [Type] => varchar(50) [Null] => NO [Key] => [Default] => [Extra] => ) Array ( [Field] => Photo_Et [Type] => varchar(100) [Null] => YES [Key] => [Default] => [Extra] => )
    Avec ce code en plsu:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $link = mysql_connect('localhost', 'root', 'mdp');
    	if(!$link)	  
    	 {
       		echo 'Impossible de se connecter à MySQL';
       		exit;
    	}
    Maintenant, je vais devoir chercher comment ne prendre QUE le nom du champ et pas tout le reste (type...)

    Merci pour tout, tu es vraiment sympa

    beegees

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

Discussions similaires

  1. connaitre le nom des colonnes d'une table
    Par vincent.mbg dans le forum SQLite
    Réponses: 2
    Dernier message: 08/04/2009, 14h17
  2. Nom des colonnes d'une table
    Par stefsas dans le forum SAS Base
    Réponses: 1
    Dernier message: 19/05/2008, 11h30
  3. Recupérer les nom des colonnes d 'une table
    Par mitnick2006 dans le forum JDBC
    Réponses: 2
    Dernier message: 08/05/2008, 21h56
  4. [JDBC]Nom des colonnes d'une table
    Par Guybrush dans le forum JDBC
    Réponses: 6
    Dernier message: 08/09/2004, 18h28
  5. [Firebird 1.5] nom des colonnes d'une table
    Par c0rwyn dans le forum SQL
    Réponses: 4
    Dernier message: 03/09/2004, 14h44

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