0

msSQL テーブル内のすべての情報を HTML テーブルに表示しようとしていますが、それほど素晴らしいものではありません。

<table border="1">
<?
echo "<tr>";
for ($i = 0; $i < mssql_num_fields($result); ++$i){
    echo "<th>" .$column_names[$i] . "</th>";
}
echo "</tr>";

$num_rows =  mssql_num_rows($result);

for ($i = 0; $i < $num_rows; ++$i){
    echo "<tr>";
    foreach ($column_names as $key => $val){    
        $result_row = mssql_query("SELECT * FROM username WHERE id = '$i'");
        $row = mssql_fetch_assoc($result_row);
        echo "<td>";
        echo $row[$val];
        echo "</td>";
    }
    echo "</td>";
}
?>
</table>

これは機能します。最初の部分は列名を正常に出力しますが、残りについては次のとおりです。1)ループを介して毎回クエリを作成するのはちょっと面倒だと思います2)行のIDが移動するため、実際には機能しません一部の ID が使用されていないため、テーブルの行数よりもはるかに多くなります。

1 つのクエリを作成し、データベースからすべてを一度に取得して、そこから HTML テーブルを作成できるように思えますが、行ごとにアクセスする方法がわかりません$row[next row][shifted value from $column_names。このクエリを改善するにはどうすればよいですか?

4

2 に答える 2

0
function table_cell($item, $header=false) {
    if (!$item) return '';
    $elemname = ($header) ? 'th' : 'td';
    $escitem = htmlspecialchars($item, ENT_NOQUOTES, 'UTF-8');
    return "<{$elemname}>{$escitem}</{$elemname}>";
}
function table_header_cell($item) {
    return table_cell($item, true);
}
function table_row($items, $header=false) {
    $func = ($header) ? 'table_header_cell' : 'table_cell';
    return "<tr>\n\t".implode("\n\t", array_map($func, $items))."\n</tr>\n";
}

function echo_result_as_table($result) {
    if ($result && $row = mssql_fetch_assoc($result)) {
        $columnnames = array_keys($row);
        echo "<table>\n", table_row($columnnames, true), "\n";
        do {
            echo table_row($row), "\n";
        } while ($row = mssql_fetch_assoc($result));
        echo "</table>\n";
    }
}


$result = mssql_query("SELECT * FROM username");
echo_result_as_table($result);
if ($result) mssql_free_result($result);

生の mssql 結果ハンドルの代わりに連想配列の配列がある場合は、次のような関数を使用してテーブル文字列を生成できます。

function array_to_table($arrayofassoc) {
    if (!$arrayofassoc) return '';
    $tablestr = '<table>';
    $tablestr .= table_row(array_keys($arrayofassoc[0]), true);
    $tablestr .= implode('', array_map('table_row', $arrayofassoc));
    $tablestr .= '</table>';
    return $tablestr;
}
于 2013-02-01T18:27:18.610 に答える
-2

これを試して:

while($row = mysql_fetch_results($result)){
    echo '<td>'.$row['column_name'].'</td>';
}

「column_name」は mysql の列の名前です。

しかし、「待って、でも PDO」と言う人もいます。

于 2013-02-01T17:46:29.623 に答える