PHPでMySQLのTABLEデータを表示させる

以前MySQLを入れて終わってたので簡単なサンプルのメモです。

  1. MySQLにテーブルを作ってデータを入れる
  2. PHPMySQLのDBにアクセスする
  3. MySQLのDBデータを取得する
  4. ブラウザに表示する

ここまで出来たら第一歩でしょうか。

MySQLにテーブルを作ってデータを入れる

MySQLを入れただけなのでまだ空っぽです。
なので仮データを入れることにします。

どっかのサイトから参考にユーザーテーブルを作ります。

CREATE TABLE user (
    user_id          CHAR(128)             PRIMARY KEY           COMMENT 'ユーザーID',
    name             CHAR(128)                                   COMMENT '名前',
    age              INT(3)                                      COMMENT '年齢',
    reg_dt           DATETIME              NOT NULL              COMMENT '登録日',
    reg_user         VARCHAR(128)          NOT NULL              COMMENT '登録者',
    mod_dt           DATETIME                                    COMMENT '更新日',
    mod_user         VARCHAR(128)                                COMMENT '更新者',
    del_date         DATETIME                                    COMMENT '削除日',
    del_user         VARCHAR(128)                                COMMENT '削除者',
    del_flg          TINYINT(1)   UNSIGNED NOT NULL DEFAULT 0    COMMENT '削除フラグ'
)
ENGINE=InnoDB
DEFAULT CHARSET=utf8
COMMENT='ユーザー';

テーブルを作ったらデータを入れる

INSERT INTO `user` 
(`user_id`,`name`, `age`, `reg_dt`, `reg_user`, `mod_dt`, `mod_user`, `del_date`, `del_user`, `del_flg`) 
VALUES 
('1','user_1', 10, '2000-01-01 00:00:00','root',NULL,NULL,NULL,NULL,0);

PHPMySQLのDBにアクセスする

PDOでアクセスしてみる。
testDBは最初からあったのを使用。
ない場合は作っとく

$dbname = 'test';        // データベース名
$host = 'localhost';        // ホスト
$user = 'root';         // mysqlに接続するユーザー
$password = 'rLw3>lfut?1q';    // パスワード
$dns = 'mysql:dbname='.$dbname.';host='.$host.';charset=utf8';

try {
    $dbh = new PDO($dns, $user, $password,
        array(
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)
    );
    if ($dbh == null) {
        print_r('接続失敗').PHP_EOL;
    } else {
        print_r('接続成功').PHP_EOL;
    }
} catch(PDOException $e) {
    echo('Connection failed:'.$e->getMessage());
    die();
}

MySQLのDBデータを取得する

show tableでテーブル名を取得して
そのテーブル名を使ってSELECT文を作ってテーブルデータを取得する

$sql = 'SHOW TABLES';
$stmt = $dbh->query($sql);

while ($result = $stmt->fetch(PDO::FETCH_NUM)){
    $table_names[] = $result[0];
}

$table_data = array();
foreach ($table_names as $key => $val) {
    $sql2 = "SELECT * FROM $val;";
    $stmt2 = $dbh->query($sql2);
    $table_data[$val] = array();
    while ($result2 = $stmt2->fetch(PDO::FETCH_ASSOC)){
        foreach ($result2 as $key2 => $val2) {
            $table_data[$val][$key2] = $val2;
        }
    }
}

ブラウザに表示する

テーブルデータをテーブルで表示

foreach ($table_data as $key => $val) {
    echo "<h1>$key</h1>";
    if (empty($val)) {
        continue;
    }
    echo "<table border=1 style=border-collapse:collapse;>";
    echo "<tr>";
    foreach ($table_data[$key] as $key2 => $val2) {
    echo "<th>";
    echo $key2;
    echo "</th>";
    }
    echo "</tr>";
    echo "<tr>";
    foreach ($table_data[$key] as $key2 => $val2) {
    echo "<td>";
    echo $val2;
    echo "</td>";
    }
    echo "</tr>";
    echo "</table>";
}

表示は下のような
見出しにテーブル名でテーブル表示でテーブルデータを表示することができた

user

user_idnameagereg_dtreg_usermod_dtmod_userdel_datedel_userdel_flg
1user_1102000-01-01 00:00:00root0

多分テーブルが増えても全取得できてると思う

とりあえず、簡単な表示はできました。

ps. <pre>でテーブル囲ったらテーブルの見出しが真っ白で見えないね(汗