2009-12-05 36 views
10

¿Esto está bien?¿Cómo obtener los nombres de las columnas junto con los resultados en php/mysql?

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

A continuación, al intentar imprimir

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

me dio un error

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

Me he dado cuenta de que $ i no se incrementa, teniendo siempre el valor 0. Además, '' $ row' y $ resultset' no han sido utilizados en este ejemplo , y '$ result' no está definido dentro del alcance del ejemplo. –

+0

Tiene razón se olvidó de incrementar $ i :) – programmernovice

Respuesta

19

Pruebe la función mysql_fetch_field.

Por ejemplo:

<?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: ¡Bonita foto! :) –

+0

Gracias. ¡Igualmente! :) – Atli

8

que desea buscar en

mysql_fetch_assoc 

¿Qué le da a cada fila como una clave asociativa => valor par donde la clave es la nombre de la columna

Documentación here

12

Uso mysql_fetch_assoc para obtener sólo un arreglo asociativo y recuperar los nombres de columna con la primera iteración:

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

Ahora puede imprimir la cabecera de la mesa con el primera iteración también:

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

También podría eliminar el if y do $ columns = isset ($ resultset [0])? array_keys ($ resultset [0]): array(); fuera del ciclo :) –

+0

Hola, gran idea, mejor que utilizar el campo mysql_fetch_field, pero he votado a favor de la publicación a continuación, ya que es la respuesta directa a mi pregunta :) – programmernovice

0

Aunque está obsoleto y ya no en PHP 7 puede evitar tener que usar un objeto usando la función mysql_field_name en su lugar, que devuelve una cadena.

0

Prueba este

 $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>"; 

O

$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>"; 
Cuestiones relacionadas