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

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

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

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