2011-01-16 3 views
0

J'utilise ce code pour tenter d'attraper un nom de table et le stocker dans une variable.Sortie étrange PHP

<?php 
connectDB(); 
$sql = "SHOW TABLES"; 
$result = mysql_query($sql); 
$tables = mysql_fetch_array($result); 
    foreach ($tables as $table) { 
     $table_name = $table[0]; 
     echo $table_name; 
    } 
closeConn(); 
?> 

D'une part, sa sortie « aa » et « bb » si je change l'index du tableau que je sais arent noms de table dans la db et deux, ce que je veux faire est de lancer un code pour chaque table le DB et insérer le nom de la table dans une variable que je peux utiliser dans le code? Comment ferais-je cela?

Répondre

3
$tables = mysql_fetch_array($result); 

mysql_fetch_array récupère une ligne, pas l'ensemble complet. Cela signifie que lorsque vous faites $table[0], vous travaillez réellement sur la valeur de chaîne de chaque champ de la ligne.

Vous devez mettre le mysql_fetch_array dans la boucle à la place:

while ($table = mysql_fetch_array($result)) { 
    $table_name = $table[0]; 
    echo $table_name; 
} 
+0

Je recommanderais 'echo" $ nom_table \ n ";' – StasM

+0

merci, cela a eu! N'importe quelle idée pourquoi ceci imprimerait seulement deux des 3 tables commençant par le deuxième et ignorant le premier? – benhowdle89

+0

@StasM Je présume que ce n'est pas le but final de '$ table_name', mais oui, c'est probablement une bonne suggestion. – lonesomeday

1

SHOW TABLES retourne une table avec un nom de table par ligne. Vous devez utiliser mysql_fetch_array autant de fois qu'il ya de lignes dans la table, car il ne récupère que une ligne de la table ...

penser à quelque chose comme ceci:

while($row = mysql_fetch_array($result)) { 
    $table_name = $row[0]; 
    // ... 
} 
0

$ sql = " SHOW TABLES "; $ resultat = mysql_query ($ sql);

while ($row = mysql_fetch_array($result, MYSQL_BOTH)) 
{ 
    $tables[] = $row[0]; 
} 

// To Display 
foreach ($tables as $table) { 

    $table_name = $table; 
    echo $table_name; 
}