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écupérer le nom des tables [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 138
    Par défaut Récupérer le nom des tables
    Bonjour,

    Tout d'abord, j'espère que ce poste sera au bon endroit :p

    Donc, pour expliquer simplement mon soucis :

    J'ai un bout de code pour créer automatiquement des tables sous php/mysql :
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
     
    $titre = trim(htmlspecialchars(addslashes($_POST['titre'])));
    $lien = trim(htmlspecialchars(addslashes($_POST['lien'])));
    $pseudo = trim(htmlspecialchars(addslashes($_POST['pseudo'])));
    $mdp = trim(htmlspecialchars(addslashes($_POST['mdp'])));
     
    $table = "galerie_".$pseudo;
    $db = $ma_base_de_donnee;
     
     
      if (Ma table existe) {
     
    	J'insère les valeurs ....
     
    	 if(Le champ titre existe déja){
     
    	       j'update mon champ.
     
    	}
     
    	else {
     
                  je crée un nouveau champ
     
    	}
     
    }
     
       else{
     
    $query="CREATE TABLE galerie_$pseudo ( 
    	id mediumint(8) unsigned NOT NULL auto_increment,
    	pseudo varchar(20) NOT NULL default '',
    	mdp varchar(20) NOT NULL default '',
    	titre varchar(20) NOT NULL default '',
    	lien varchar(150) NOT NULL default'',
    	PRIMARY KEY (`id`)
    );";  
    $result=mysql_query($query) or die('Erreur SQL !<br>'.$query.'<br>'.mysql_error());
     
    if($result){
     
    $query = "INSERT INTO galerie_$pseudo VALUES ('', '$pseudo', '$mdp', '$titre', '$lien')";
    $result= mysql_query($query) or die('Erreur SQL !<br>'.$query.'<br>'.mysql_error());
     
    // .......................
    Bref, j'ai un peu abrégé mon code pr que ce soit plus lisible, ce qui le rend complètement faux, mais ce n'est pas grave, le but étant de voir la création des tables quand l'utilisateur n'existe pas : galerie_$pseudo.

    Ainsi c'est magnifique je peux créer mes tables tranquillement mais le soucis se passe quand je veux récupérer les valeurs de mes tables. En effet j'aimerai pouvoir lancer une requête SQL qui m'affiche chaque nom de table, ce qui me permettrait ensuite de lire les valeurs de chaque table.

    J'étais parti sur cette piste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $requete = 'SHOW TABLES FROM '.$db.'';
    $exec = mysql_query($requete) or die('Erreur SQL !<br>'.$requete.'<br>'.mysql_error());
    $nb_table = mysql_num_rows($exec);
     
    for($i=0; $i<$nb_table; $i++){
     
    echo $i;
     
    }
    Et j'obtiens le nombre de tables dans ma base de donnée.
    Le seul soucis c'est que je n'arrive pas a récupérer de string pour chaque table, ce qui me permettrait ensuite de faire ereg('^galerie_',$tables) et d'obtenir uniquement les tables qui concernent ma galerie !

    Alors voilà, je m'étais dit qu'il serait p-e faisable d'associer un "genre" de SELECT 'pseudo' avec le SHOW TABLES FROM ce qui m'aurait permis par la suite un "galerie_".$exec['pseudo']; et vérifier son existence pour me dépatouiller... enfin bref j'arrive a rien et je commence a être agacé donc c'est plus tip top pour réfléchir.

    En espérant avoir été clair et que quelqu'un sera à même de me répondre.

    Cordialement,

    Jean.

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 952
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 952
    Par défaut
    Salut Evilam,

    Comme les commandes show sont des racourcis interogeant des tables ou vues systèmes, ce lien devrait te permettre de retrouver les infos que tu cherches :
    http://dev.mysql.com/doc/refman/5.0/...on-schema.html

    Par contre à mon avis tu devrais revoir ton modèle car créer des tables et des colonnes depuis l'appli, c'est vraiment pas top.

    PS : tu joues sur KGS?

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 138
    Par défaut
    Merci pour le lien ^^

    PS: Oui oui, je joue à KGS, pour l'instant je n'ai jamais croisé d'autres personnes avec le même pseudonyme ;p

    Si je trouve mon bonheur, je te ferai une pédago? :p

    EDIT : Après lecture du lien : Bah ca m'avance pas du tout, c'est encore du blabla... rien de concret en ce qui concerne ma vision des choses

  4. #4
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Par défaut
    Citation Envoyé par Evilam Voir le message
    En effet j'aimerai pouvoir lancer une requête SQL qui m'affiche chaque nom de table, ce qui me permettrait ensuite de lire les valeurs de chaque table.

    J'étais parti sur cette piste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $requete = 'SHOW TABLES FROM '.$db.'';
    $exec = mysql_query($requete) or die('Erreur SQL !<br>'.$requete.'<br>'.mysql_error());
    $nb_table = mysql_num_rows($exec);
     
    for($i=0; $i<$nb_table; $i++){
     
    echo $i;
     
    }
    Et j'obtiens le nombre de tables dans ma base de donnée.
    Le seul soucis c'est que je n'arrive pas a récupérer de string pour chaque table, ce qui me permettrait ensuite de faire ereg('^galerie_',$tables) et d'obtenir uniquement les tables qui concernent ma galerie !

    il faudrait peut-être penser à lire le résultat... par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for($i=0; $i<$nb_table; $i++){
    
    $ligne = mysql_fetch_array($exec) ;
    echo 'nom de table : ' . $ligne[0] . '<br>' ;
    
    
    }

    Citation Envoyé par Evilam Voir le message

    Alors voilà, je m'étais dit qu'il serait p-e faisable d'associer un "genre" de SELECT 'pseudo' avec le SHOW TABLES FROM ce qui m'aurait permis par la suite un "galerie_".$exec['pseudo']; et vérifier son existence pour me dépatouiller... enfin bref j'arrive a rien et je commence a être agacé donc c'est plus tip top pour réfléchir.
    Ça par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $requete = "SHOW TABLES 
    FROM $db
    LIKE galerie_" . $pseudo ;
    Citation Envoyé par Evilam Voir le message
    EDIT : Après lecture du lien : Bah ca m'avance pas du tout, c'est encore du blabla... rien de concret en ce qui concerne ma vision des choses
    ça aurait dû te permettre de trouver ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $requete = "SELECT table_name
    FROM information_schema.tables
    WHERE table_name = galerie_" . $pseudo ;
    Ceci dit, je rejoins skuatamad sur le fond : créer des tables et des colonnes depuis l'interface, c'est pas très clean comme conception.

  5. #5
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 952
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 952
    Par défaut
    Citation Envoyé par Antoun Voir le message
    il faudrait peut-être penser à lire le résultat.
    Ah, mes réflexes php/mysql sont un peu rouillés.

    Je croyais que tu n'arrivais pas à fetch le résultat de la requête show, c'est pour ça que je te proposais l'équivalent avec une requête select classique.

    A noter que information_schema n'est disponnible que depuis mysql5, regarde la faq pour plus d'infos.

    Dernière chose, si tu choisis d'utiliser information_schema, il faut que ton user est le droit de select la table, sous root :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    use information_schema;
    
    GRANT SELECT ON tables.* TO ton_user;

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 138
    Par défaut
    Tout d'abord, merci à vous deux pour vos réponse.

    Dans le cas du mysql_fetch_array que tu énonces Antoun, il me semblait l'avoir déjà testé et ne pas avoir obtenu de résultat avec le echo (pas de message d'erreur non plus).

    Cependant j'espère que la fatigue et l'agacement m'avaient fait faire des erreurs stupides et qu'à tête pausé ce soir tout se passera mieux, en suivant vos conseils.

    Encore merci pour votre aide et je vous tiens au courant sur la suite des évènements :p

    Bonne journée,

    Cordialement,

    Jean.

  7. #7
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Par défaut
    Citation Envoyé par Evilam Voir le message

    Dans le cas du mysql_fetch_array que tu énonces Antoun, il me semblait l'avoir déjà testé et ne pas avoir obtenu de résultat avec le echo (pas de message d'erreur non plus).
    Le piège est qu'il n'y a pas de nom de colonne fixe avec un SHOW. C'est pourquoi j'utilise $ligne[0] et non $ligne['table'] ou $ligne['pseudo'].

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 138
    Par défaut
    Voilà, après avoir sué un peu... ma solution avec MyQSL4 (car je n'ai pas la 5) est :

    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
     
    $db = "bdd_site_******";
     
    $requete = "SHOW TABLES 
    FROM " .$db  ;
     
    $exec = mysql_query($requete) or die('Erreur SQL !<br>'.$requete.'<br>'.mysql_error());
    $nb_ligne = mysql_num_rows($exec);
     
    $i=0;
     
    while ($i<$nb_ligne){
     
    $ligne = mysql_result($exec,$i);
     
    echo("<div align="."center"."><b>$ligne</b></div><BR>");
     
    $i++;
     
    }
    J'ai un affichage parfait de tous les noms de mes tables, le mysql_fetch_array ne fournissant aucune réponse avec le code fournit par Antoun.

    Merci encore pour votre aide, ca va me permettre d'aller installer MySQL5 pour mes prochaines applications et de continuer à jouer au légo avec toutes les nouvelles fonctions

    Cordialement,

    Jean.

  9. #9
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Par défaut
    Citation Envoyé par Evilam Voir le message
    J'ai un affichage parfait de tous les noms de mes tables, le mysql_fetch_array ne fournissant aucune réponse avec le code fournit par Antoun.
    ça marche très bien chez moi... tu es sûr d'avoir remis ton $i à zéro avant la boucle ?

    Au passage, ton histoire de $i me semble inutilement compliquée... Voici un exemple sans compteur avec mysql_fetch_array :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $resu = mysql_query("show tables from $db", $bdd) ;
    while($ligne = mysql_fetch_array($resu)) {
    	echo $ligne[0] . '<br>' ;
    }

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

Discussions similaires

  1. requête SQl pour récupérer les noms des tables
    Par taher84 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 16/07/2010, 22h07
  2. [ADO] Récupérer le nom des Tables et des champs
    Par Kephuro dans le forum Bases de données
    Réponses: 2
    Dernier message: 02/06/2008, 17h04
  3. Réponses: 11
    Dernier message: 12/05/2006, 17h18
  4. Réponses: 2
    Dernier message: 23/06/2005, 17h56
  5. Réponses: 2
    Dernier message: 03/02/2005, 13h21

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