データベースから取得したデータをHTMLテーブルで表示する方法

プログラム→HTML プログラミング

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

スポンサーリンク

サンプルプログラム

// データベースに接続
$link = mysqli_connect('localhost', 'user', 'password', 'test');

if (mysqli_connect_errno()) {
	die("データベースに接続できません:" . mysqli_connect_error() . "<br>");
} else {
	 echo "データベースの接続に成功しました。<br>";
}

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 .= "<th>" . $val->name . "</th>";
}

引数のmysqli_resultオブジェクトとフィールド定義情報をforeachで2重ループし “カラム名” をキーにレコードを取得します。

foreach ($result as $row) {
    $html .= "<tr>";
    foreach ($ffields as $val) {
        $value = $row[$val->name];
        $html .= "<td>${value}</td>";
    }
    $html .= "</tr>";
}

SQL文によって1つ1つテーブルを作らなくても、取得したmysqli_resultオブジェクトを渡すだけで、任意のHTMLテーブルを作成することができます。

タイトルとURLをコピーしました