我想用PHP创建表。我需要动态获取所有列的名称。
这样的事情:
id name username email
. . . .
. . . .
. . . .
. . . .
我的代码是:
$query = "SELECT * FROM user";
$result = $connection -> prepare($query);
$result -> execute();
echo "<table border=1 width=100%>";
echo '<tr>';
foreach ($result -> fetch(PDO::FETCH_OBJ) as $key => $value)
{
echo "<th>$key</th>";
}
echo '</tr>';
foreach ($result -> fetchAll(PDO::FETCH_OBJ) as $value)
{
echo '<tr>';
echo "<td>".$value -> id."</td>";
echo "<td>".$value-> name."</td>";
echo "<td>".$value-> username."</td>";
echo "<td>".$value -> password."</td>";
echo "<td>".$value -> account."</td>";
echo '</tr>';
}
echo '</table>';
但是当我获取所有记录时,我在第二个foreach循环中失去了我的第一个记录。
实际上我的第一个记录是第一个foreach循环中的$value
。我想在第二个foreach循环中设置TD标签。
答案 0 :(得分:1)
尝试缓存结果。
您遇到的问题是$query = "SELECT * FROM user";
$result = $connection -> prepare($query);
$result -> execute();
// store results in memory
$headers = '<tr>';
$output = '<tr>';
foreach( $result->fetch(PDO::FETCH_OBJ) as $key=>$value ) {
$headers .= '<th>' . $key . '</th>';
$output .= '<td>' . $value . '</td>';
}
$headers .= '</tr>';
$output .= '</tr>';
foreach ($result -> fetchAll(PDO::FETCH_OBJ) as $value)
{
$output .= '<tr>'
. '<td>' . $value->id . '</td>'
. '<td>' . $value->name . '</td>'
. '<td>' . $value->username . '</td>'
. '<td>' . $value->password . '</td>'
. '<td>' . $value->account . '</td>'
. '</tr>';
}
$output = '<table border="1" width="100%">' . $output . '</table>';
// output result set (full table)
echo $output;
并不只是抓住桌子上的钥匙 - 它会抓住第一行和钥匙。
echo
以上示例获取所有结果集并动态构建表。由于它存储到内存中,因此它还具有在每个部分html元素上比{{1}}处理更快的优势。一旦完成单个回波构建,它就会输出表格。