こちらの記事でデータベースに対してテーブルを作成する方法を紹介しました。
今回はデータベースに作成した、テーブルの一覧を表示させる方法を紹介します。
※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で操作したほうが早いです。
しかし、動的にテーブルを作ったり表示したりする場面は結構出てきますので、覚えておくと損はないかなと思います。
具体的な例は、勤怠管理システムで社員を追加して、追加した社員用の勤怠テーブルを作ったり、
毎日勤怠管理システムのデータベースのバックアップを取るために、テーブル一覧を取得してテキストに保存したりが考えられます。