当サイトは広告およびアフィリエイトプログラムによる収益を得ています。
データベースから取得したデータをHTMLテーブルで表示するプログラム

データベースから取得したデータをHTMLテーブルで表示するプログラム

2024年1月11日
Blueskyロゴ Pocketロゴ  はてなブックマークロゴ

データベースから取得したレコードをそのまま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テーブルを作成することができます。