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 :

Afficher les noms des tables et colonnes d'une Bdd Mysql [PDO]


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 15
    Points : 11
    Points
    11
    Par défaut Afficher les noms des tables et colonnes d'une Bdd Mysql
    Bonsoir.
    J’affiche un récapitulatif des tables avec leurs colonnes d’une de mes base de données, à l’ancienne, comme ceci
    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
     
    <?php 
    $host="localhost";
    $user="root";
    $passwd="";
    $link = @mysql_connect($host,$user,$passwd);
    	if (!$link)
    	{
    	echo "<h2>Erreur du serveur. Essayez de vous connecter plus tard.</h2>";
    	die;
    	}
    mysql_connect($host,$user,$passwd);
     
    $linkdb = @mysql_select_db ("matable");
    	if (!$linkdb)
    	{
    	echo "<h2>Erreur de connexion a la BDD. Essayez de vous connecter plus tard.</h2>";
    	die;
    	}	
     
    mysql_select_db ("matable");$db_name = 'matable';
    mysql_select_db($db_name);
    $result = mysql_query( 'SHOW TABLES' );
       while ($row = mysql_fetch_row($result))
    {
    echo "<br /><b>$row[0]</b><br />";
    $fields = mysql_list_fields("matable", $row[0] ); 
    $columns = mysql_num_fields($fields); 
    for ($i = 0; $i < $columns; $i++)
    {
    echo mysql_field_name($fields, $i) . "<br />"; 
    }
    }
     ?>
    Et cela fonctionne parfaitement.

    Par contre, voulant le faire en PDO, je n’y arrive pas… (L’âge sans doute)
    La connexion parait correcte, mais le reste, malgré mes recherches, je ne trouve pas de solutions.
    Il faut dire que j'essaie depuis peu à comprendre PDO, mais les vieilles habitudes.......

    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 
    //connexion PDO
    try
    {
    	$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
    	$bdd = new PDO('mysql:host=localhost;dbname=matable;charset=utf8', 'root', '', $pdo_options);
    }
    catch (Exception $e)
    {
            die('Erreur : ' . $e->getMessage());
    }
     
    // A partir ici je ne trouve pas équivalent en PDO
    $result = mysql_query('SHOW TABLES');
       while ($row = mysql_fetch_row($result))
    {
    echo "<br /><b>$row[0]</b><br />";
    $fields = mysql_list_fields("matable", $row[0] ); 
    $columns = mysql_num_fields($fields); 
    for ($i = 0; $i < $columns; $i++)
    {
    echo mysql_field_name($fields, $i) . "<br />"; 
    }
    }
     ?>
    Pouvez-vous m’aider à passer ce cap !
    Merci.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 197
    Points : 300
    Points
    300
    Par défaut
    Bonjour

    Attention il faut se connecter à une base de données, pas à une table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	$bdd = new PDO('mysql:host=localhost;dbname=mabase;charset=utf8', 'root', '', $pdo_options);
    Ensuite, pour accéder aux données en reprenant ton exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
            /*On prépare le SQL*/
    	$result = $bdd->prepare('Show Tables'); 
            /* on l'exécute */
    	$result->execute(array()); 
            /* on récupère les données sous forme d'un tableau d'objets */
    	$data = $result->fetchall(PDO::FETCH_OBJ);
            /* on affiche les données */
    	print_r($data);
    Un autre exemple, avec une requête paramétrée, en mode plus "générique" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
            /* Un exemple de récupération de données utilisateur */
            $identifiant = isset($_GET['valeur']) ? intval($_GET['valeur']) : 0;
            /* On prépare le SQL en indiquant des valeurs paramétrées, commençant par un ":" */
    	$result = $bdd->prepare('Select Champ1, Champ2, Champ3 From maTable1 Where Champ4 < :param1 And Champ5 = :param2');
            /* On exécute avec un tableau associatifs des paramètres déclarés ci-dessus, en ommettant le ":" et en associant leur valeur */
    	$result->execute(array("param1" => 12, "param2" => $identifiant));
            /* On récupère les données sous forme de tableau d'objets */
    	$data = $result->fetchall(PDO::FETCH_OBJ);
            /* on affiche les données */
    	print_r($data);
    Espérant que ça t'aide un peu

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    Merci EddiGordo pour votre aide qui a résolu mon problème.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $bdd = new PDO('mysql:host=localhost;dbname=mabase;charset=utf8', 'root', '', $pdo_options);
    Effectivement, j'aurais du donner un nom de ma base plus explicite en remplacement de son vrai nom.
    la nommer "matable" n'était pas approprié et pouvait prêter à confusion.

    J'ai une vision plus claire des différences avec PDO qu'il me faut approfondir.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    Voilà le final pour ceux qui seront intéressés.
    Précédemment, je n'affichais que le nom des tables de la base de données, avec des Array les uns à la suite des autres.
    Pas trop lisible.
    j'ai ajouté les noms des colonnes pour chaque table, (sans les données). C'était mon problème au début.
    J'ai mis le tout dans un tableau pour éviter le CSS, mais avec une meilleure lisibilité.
    Voici le code (que certains amélioreront certainement avec un peu de CSS)
    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
    <?php
    /******************************************************************************************************
    Lignes 22 à 30 = connexion à la Bdd
    Ligne 25 = remplacer VotreBase par le nom de votre base de données
    Ligne 38 = affichage du nom de la base de données sur fond jaune #FFFF00
    ligne 40 = permet d'espacer la suite de l'affichage
    Ligne 47 = affiche le nom de la table sur fond bleu #98FEF9
    Ligne 53 = affiche le nom des colonnes de chaque table, pas les données
    En ligne 40 on peut supprimer l'espacement en supprimant :
    <tr><td>&nbsp;</td></tr>
    ******************************************************************************************************/
    ?>
    <!doctype html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>Tables+Tuples</title>
    </head>
     
    <body>
    <?php
    try
    {
    	$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
    	$bdd = new PDO('mysql:host=localhost;dbname=VotreBase;charset=utf8', 'root', '', $pdo_options);
    }
    catch (Exception $e)
    {
            die('Erreur : ' . $e->getMessage());
    }
    $tab = $bdd->query('SHOW TABLES');
    $tuples = $tab->fetchAll(PDO::FETCH_ASSOC);
    if(count($tuples)) {
        $columns_names = array_keys($tuples[0]);
    echo '<table>
    		<tr>';
       		 foreach($columns_names as $col) {
             echo '<th bgcolor="#FFFF00">'. $col .'</th>'; 
       		 }
        echo '</tr><tr><td>&nbsp;</td></tr>'; 
     
        foreach($tuples as $tuple) {
            echo '<tr>';
            foreach($tuple as $col) {
    			echo '<table>
    			    <tr>
        				<th bgcolor="#98FEF9">'. $col .'</th>
      				</tr>
    ';
      $reponse = $bdd->query("SHOW COLUMNS FROM $col");
    					while ($donnees = $reponse->fetch())
    					{
    						echo '<tr><td>'.$donnees['Field'].'<br/></td></tr>'; 
    					}
      echo '
    </table>
    ';
            }
            echo '</tr>';
       }
        echo '</table>';
    }
    else {
        echo 'Pas de résultat';
    }
    ?>  
    </body>
    </html>

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 197
    Points : 300
    Points
    300
    Par défaut
    Attention avec l'emploi des commandes PDO query() ou exec(), elles sont moins intéressantes que la paire prepare()/execute().
    C'est une meilleure pratique d'utiliser ces méthodes, car elles représentent, en fait, ce qui constitue un des principaux intérêts d'utiliser PDO : les requêtes préparées.
    Ces dernières aident à lutter contre les injections SQL (même si ce n'est pas leur but premier) et surtout sont réutilisables plusieurs fois dans un même script avec des valeurs de paramètres différentes (dans une boucle par exemple).
    Cela permet une optimisation que l'on ne peut avoir avec query() ou exec().

    Il est vrai que pour le besoin original de ce fil, utiliser query() n'est pas très grave mais je ne peux m'empêcher de le dire tout de même.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 15
    Points : 11
    Points
    11
    Par défaut
    EddiGordo c’est tout à votre honneur d’appuyer sur la sécurité, et surtout ...ne vous empêchez pas de le dire....
    J’appliquerai vos recommandations dès que je manipulerai les données de ma base en utilisant les requêtes préparées que je commence à étudier.

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

Discussions similaires

  1. Afficher les noms des colonnes d'une table
    Par Imageek dans le forum SQL
    Réponses: 2
    Dernier message: 25/03/2010, 17h20
  2. Réponses: 3
    Dernier message: 19/01/2010, 09h53
  3. Afficher les noms des colonnes d'une table
    Par witch dans le forum Requêtes
    Réponses: 10
    Dernier message: 07/10/2008, 13h25
  4. Afficher les nom des tables d'une base de donnée
    Par newmar dans le forum Administration
    Réponses: 4
    Dernier message: 02/04/2008, 16h40
  5. [WD10] Afficher les noms des colonnes
    Par devalender dans le forum WinDev
    Réponses: 4
    Dernier message: 24/02/2006, 14h38

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