0

我正在尝试在 HTML 表中显示 msSQL 表中的所有信息,并且遇到了一些不太好的东西。

<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 未被使用。

似乎我应该能够只进行一个查询并一次从数据库中提取所有内容,然后从中构建我的 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 回答