【データを表示しよう】PHPでデータベースのテーブル一覧を取得する方法

PHP PHP

こちらの記事でデータベースに対してテーブルを作成する方法を紹介しました。

今回はデータベースに作成した、テーブルの一覧を表示させる方法を紹介します。
phpでデータベース(MariaDB、MySQL)に接続する方法を別途記事にしましたので、下記リンクよりご覧下さい。

データベースのテーブルを取得して表示する。

まずはサンプルコード。
前回の記事をベースに改造していきます。

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>データベース接続</title>
    <style>
        table,td,th {
            border: 1px solid #000;
            padding: 5px;
            text-align: center;
        }
    </style>
</head>
<body>
    <form name="myForm" method="post" action="study_database_edit.html">
        <select id="code_selection" name="code">
            <option value="1">テーブル作成</option>
            <option value="2">テーブル一覧</option>
            <option value="3">テーブル削除</option>
        </select>
        <p><label>テーブル名</label><input type="text" name="name" placeholder="hogehoge" pattern="^[0-9A-Za-z]+$"></p>
        <p><input type="submit" value="実行"></p>
    </form>
    <?php
        try{
            if(isset($_POST['code'])==true){//処理コードがあるか
                
                //データベースにアクセス
                $dsn = 'mysql:dbname=test;host=localhost;charset=utf8';
                $user = 'root';
                $password ='';
                $dbh = new PDO($dsn,$user,$password);
                $dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
                switch($_POST['code']){//処理コード別に処理
                    case 1:            //データベースにテーブルを作成する処理
                        if(isset($_POST['name'])==true){
                            //データベースに対して実行するSQL文を作成
                            $sql = 'CREATE TABLE IF NOT EXISTS '.$_POST['name'].' (id INT(11) NOT NULL auto_increment PRIMARY KEY,hogehoge TEXT) DEFAULT CHARSET="utf8"';
                            //SQL文を実行
                            $result = $dbh->query($sql);
                        }
                        break;
                    case 2:            //データベースのテーブルを表示する処理
                        print '<table><tr><th>№</th><th>テーブル名</th></tr>';
                        if(isset($_POST['name'])==true){
                            //データベースに対して実行するSQL文を作成
                            $sql = 'SHOW TABLES FROM test';
                            //SQL文を実行
                            $table_stmt=$dbh->prepare($sql);
                            $table_stmt->execute();
                            //行番号用変数を用意
                            $i=1;
                            //データベースのテーブルすべて読み出すまでループ
                            while($table_rec = $table_stmt->fetch(PDO::FETCH_ASSOC)){
                                //連想配列すべてを読み出すまでループ
                                foreach($table_rec as $key => $val){
                                    //番号とテーブル名とキーを表示
                                    print '<tr><td>'.$i.'</td><td>'.$val.'('.$key.')</td></tr>';
                                    $i+=1;
                                }
                            }
                        }
                        print '</table>';
                        break;
                }
            }
        }
        catch (Exception $e){//処理でエラーが発生した時はこちらを実行する
            print $e->getMessage();
        }
    ?>
</body>
</html>

上記ファイルをC:\xampp\htdocs\testに保存しましょう。
そして、アクセスします。(ブラウザのURL欄にhttp://localhost/test/study_database_edit.htmlを入力。)

セレクトボックスからテーブル一覧を選択して実行を押すと、testデータベースに登録されているテーブルを一覧表示できますね。

テーブル一覧

要点解説

データベースにアクセスにアクセスする処理を今回も使いたいので、28行~33行に移動しました。

34行で、今回(テーブル一覧)は$_POST[‘code’]が2なので、case2:を処理します。

44行目で、テーブルのヘッダを表示します。

47行目~50行目でテーブルを取得するSQLの準備、54行目で実行します。(1列取得)

56行目で連想配列全て読み出すループを行います。

58行目で列番号とテーブル名とキーを表示します。

あとがき

データベースに対してテーブルを作成したり一覧表示したりしていますが、紹介した例は、phpMyAdminで操作したほうが早いです。
しかし、動的にテーブルを作ったり表示したりする場面は結構出てきますので、覚えておくと損はないかなと思います。

具体的な例は、勤怠管理システムで社員を追加して、追加した社員用の勤怠テーブルを作ったり
毎日勤怠管理システムのデータベースのバックアップを取るために、テーブル一覧を取得してテキストに保存したりが考えられます。