2009-12-05 3 views
10

Est-ce que c'est OK?Comment obtenir les noms des colonnes avec resultset dans php/mysql?

$i = 0; 
while ($row = mysql_fetch_array($result)) 
{ 
    $resultset[] = $row; 
    $columns[] = mysql_fetch_field($result, $i); 
} 

Ensuite, lorsque vous essayez d'imprimer

<tr><th><?php echo $columns[0] ?></th><th><?php echo $columns[1] ?></th></tr> 

Je suis une erreur

Catchable fatal error: Object of class stdClass could not be converted to string 
+0

Je remarque que $ i n'est pas incrémentée, la valeur ayant toujours 0. En outre, 'row' et $' resultset' de $ ne sont pas utilisés dans cet exemple , et '$ result' n'est pas défini dans la portée de l'exemple. –

+0

Vous avez raison oublié d'incrémenter $ i :) – programmernovice

Répondre

19

Essayez la fonction mysql_fetch_field.

Par exemple:

<?php 
$dbLink = mysql_connect('localhost', 'usr', 'pwd'); 
mysql_select_db('test', $dbLink); 

$sql = "SELECT * FROM cartable"; 
$result = mysql_query($sql) or die(mysql_error()); 

// Print the column names as the headers of a table 
echo "<table><tr>"; 
for($i = 0; $i < mysql_num_fields($result); $i++) { 
    $field_info = mysql_fetch_field($result, $i); 
    echo "<th>{$field_info->name}</th>"; 
} 

// Print the data 
while($row = mysql_fetch_row($result)) { 
    echo "<tr>"; 
    foreach($row as $_column) { 
     echo "<td>{$_column}</td>"; 
    } 
    echo "</tr>"; 
} 

echo "</table>"; 
?> 
+0

@Atli: Belle photo! :) –

+0

Merci. De retour à 'ya! :) – Atli

8

Vous voulez regarder

mysql_fetch_assoc 

Ce qui donne à chaque ligne comme une clé associative => paire de valeurs où la clé est le nom de colonne.

Documentation here

12

Utilisez mysql_fetch_assoc pour obtenir seulement un tableau associatif et récupérer les noms de colonnes avec la première itération:

$columns = array(); 
$resultset = array(); 
while ($row = mysql_fetch_assoc($result)) { 
    if (empty($columns)) { 
     $columns = array_keys($row); 
    } 
    $resultset[] = $row; 
} 

vous pouvez maintenant imprimer la tête de votre table avec la première itération aussi:

echo '<table>'; 
$columns = array(); 
$resultset = array(); 
while ($row = mysql_fetch_assoc($result)) { 
    if (empty($columns)) { 
     $columns = array_keys($row); 
     echo '<tr><th>'.implode('</th><th>', $columns).'</th></tr>'; 
    } 
    $resultset[] = $row; 
    echo '<tr><td>'.implode('</td><td>', $rows).'</td></tr>'; 
} 
echo '</table>'; 
+0

Vous pouvez également supprimer les if et do $ columns = isset ($ resultset [0])? array_keys ($ resultset [0]): array(); en dehors de la boucle :) –

+0

Salut merci, bonne idée, mieux que d'utiliser le champ mysql_fetch_field mais j'ai voté pour le post ci-dessous car c'est une réponse directe à ma question :) – programmernovice

0

Bien qu'il soit obsolète et non plus en PHP 7 vous pouvez éviter d'avoir à utiliser un objet en utilisant la fonction mysql_field_name à la place qui renvoie une chaîne.

0

Essayez cette

 $result=mysql_query('SELECT * FROM `table1` where id=5') or die ('query failed'); 
echo "<table>"; 
     while ($row=mysql_fetch_assoc($result)) { 
       $column = array_keys($row); 
       for($i=0; $i<sizeof($column); $i++){ 
       echo "<tr><th>".$column[$i]."</th><td>".$row[$column[$i]]."</td></tr>"; 
       } 
      } 
echo "</table>"; 

OU

$result=mysql_query('SELECT * FROM `table1` where id=5') or die ('query failed'); 
    echo "<table>"; 
      $row=mysql_fetch_assoc($result); 
        $column = array_keys($row); 
        for($i=0; $i<sizeof($column); $i++){ 
        echo "<tr><th>".$column[$i]."</th><td>".$row[$column[$i]]."</td></tr>"; 
        } 

    echo "</table>"; 
Questions connexes