データベースから取得したレコードをそのままHTMLのテーブルで表現したい場面が多々あります。そこで、PHPとMySQLで作ってみました。

詳細! PHP 8 + MySQL入門ノート XAMPP + MAMP 対応
サンプルプログラム
// データベースに接続 $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テーブルを作成することができます。