web-dev-qa-db-ja.com

php / mysqlで結果セットと一緒に列名を取得するにはどうすればよいですか?

これでよろしいですか ?

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

次に、印刷しようとすると

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

エラーが発生しました

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

mysql_fetch_field 関数を試してください。

例えば:

<?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>";
?>
25
Atli

使用する mysql_fetch_assoc連想配列のみを取得し、最初の反復で列名を取得するには:

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

これで、最初の反復でもテーブルの先頭を印刷できます。

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>';
15
Gumbo

あなたが見たい

 mysql_fetch_assoc

これにより、各行が連想キー=>値のペアとして提供されます。ここで、キーは列名です。

ドキュメント ここ

8
Doug T.

...iを使用した最新のソリューションは次のとおりです。

$db_link = @mysqli_connect($server, $user, $pass, $db) or die("Connection failed");
$spalten = ['pc_name', 'pc_type', 'pc_snr', 'pc_bj', 'mo_port_1', 'mo_snr_1', 'mo_bj_1', 'mo_port_2', 'mo_snr_2', 'mo_bj_2'];

$abfrage = "SELECT " . implode(',', $spalten) . " FROM hardware order by pc_name";

$liste = mysqli_query($db_link, $abfrage);
$spalten = mysqli_num_fields($liste);


while ($werte[] = mysqli_fetch_array($liste, MYSQLI_ASSOC)) {}
    <table class="display" id="table" style="width:100%">
        <thead>
            <tr>
                <?php
                for ($i = 0; $i < $spalten; $i++) {
                    $feldname[$i] = mysqli_fetch_field_direct($liste, $i)->name;
                    echo '<th>' . ucfirst($feldname[$i]) . '</th>';
                }
                ?>
            </tr>
        </thead>
        <tbody>
            <?php
            for ($i = 0; $i < mysqli_num_rows($liste); $i++) {
            ?>
                <tr>
                    <?php for ($j = 0; $j < $spalten; $j++) {
                    ?>
                        <td><?php
                            echo $werte[$i][$feldname[$j]];
                            ?>

                        </td>
                    <?php } ?>
                </tr>
            <?php } ?>
        </tbody>
    </table>
0
Timo

これを試して

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

OR

 $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>";
0
Ad Kahn

非推奨になり、PHP 7ではなくなりましたが、代わりに文字列を返す関数mysql_field_nameを使用することで、オブジェクトを使用する必要がなくなります。

0
Tom Mulkins