データベースから取得したレコードをそのままHTMLのテーブルで表現したい場面が多々あります。そこで、PHPとMySQLで作ってみました。
サンプルプログラム
// データベースに接続
$link = mysqli_connect('localhost', 'user', 'password', 'test');
if (mysqli_connect_errno()) {
die("データベースに接続できません:" . mysqli_connect_error() . "
");
} else {
echo "データベースの接続に成功しました。
";
}
mysqli_query($link,'SET NAMES utf8');
// テーブルの全てのデータを取得する
$query = "SELECT * FROM test_db WHERE null IS null";
if ($result = mysqli_query($link, $query)) {
echo createHtmlTable($result);
$result->free();
}
mysqli_close($link);
/**
* HTMLテーブルの生成
* @param mysqli_result $result
* @return string
*/
function createHtmlTable($result) {
$html = "<table>";
// カラム名
$ffields = $result->fetch_fields();
$html .= "<tr>";
foreach ($ffields as $val) {
$html .= "<th>" . $val->name . "</th>";
}
$html .= "</tr>";
// レコード
foreach ($result as $row) {
$html .= "<tr>";
foreach ($ffields as $val) {
$value = $row[$val->name];
$html .= "<td>${value}</td>";
}
$html .= "</tr>";
}
$html .= "</table>";
return $html;
}
解説
メイン
mysqli_resultオブジェクトをcreateHtmlTable関数の引数にします。ちなみに、SQLは任意で問題ありません。
$query = "SELECT * FROM test_db WHERE null IS null";
if ($result = mysqli_query($link, $query)) {
echo createHtmlTable($result);
$result->free();
}
createHtmlTable関数
引数のmysqli_resultオブジェクトより、フィールド定義情報(カラム名など)を取得します。
$ffields = $result->fetch_fields();
フィールド定義情報をforeachでループし、カラム名を取得します。
foreach ($ffields as $val) {
$html .= "" . $val->name . " ";
}
引数のmysqli_resultオブジェクトとフィールド定義情報をforeachで2重ループし “カラム名” をキーにレコードを取得します。
foreach ($result as $row) {
$html .= "";
foreach ($ffields as $val) {
$value = $row[$val->name];
$html .= "${value} ";
}
$html .= " ";
}
SQL文によって1つ1つテーブルを作らなくても、取得したmysqli_resultオブジェクトを渡すだけで、任意のHTMLテーブルを作成することができます。