データベース周り

データベースの操作

データベースはphpMyAdminにて操作可能です。 同じくポートビューにて、 phpmyadmin:80 の行からアクセス可能です。

phpmyadminへのビュー表示

地球アイコンのクリックでphpMyAdminページへ移動できます。

phpMyAdmin接続直後の画面

標準状態でサンプルのデータベース(SAMPLE)が用意されているので、それを使って下さい。 なお本環境では データベースはひとつだけ作成されます 。 通常はひとつのデータベースで十分作れるでしょうから、この中でテーブルを作成していきましょう。

注釈

データベースの設定(名前やアクセス情報)を変更したい場合は、 こちらを参照してください。

データベースの設定について

データベースの設定は、 env.txt を参照してください。

env.txt
MYSQL_ROOT_PASSWORD=root
MYSQL_DATABASE=SAMPLE
MYSQL_USER=sampleuser
MYSQL_PASSWORD=samplepass

見るだけでもわかるとおり、以下の構造で記述されています。

  • MYSQL_ROOT_PASSWORD: 万一特権アクセスが必要な場合に利用するパスワード(ほぼ使いません)

  • MYSQL_DATABASE: 作成するデータベース名

  • MYSQL_USER: MYSQL_DATABASEで作成したデータベースへの(ほぼ)フルアクセス権を持つユーザー名

  • MYSQL_PASSWORD: MYSQL_USERに対するパスワード

注釈

特権アクセスが不要であれば、MYSQL_ROOT_PASSWORDの代わりに

MYSQL_RANDOM_ROOT_PASSWORD=1

と設定しておいてください。これで管理特権取得することが(すごく)困難となります。

このファイルを変更した場合、反映には環境の再構築が必要になります。 この件については、データベース名・アクセス情報の変更を参照してください。

データベースへのアクセス

PHPのPDO(MySQLドライバ)によるアクセスとしては、以下のようになります。

public/test.php
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>データベースアクセスのサンプル</title>
</head>
<body>
    <?php
    # env.txtを参考にして、データベースへの接続情報を設定してください
    $dbhost = "db"; # データベースのホスト名(本環境では固定)
    $dbname = "SAMPLE"; # データベース名
    $dbuser = "sampleuser"; # データベース接続ユーザ名
    $dbpassword = "samplepass"; # データベース接続パスワード
    # 以上からDSN文字列を生成
    $dsn = "mysql:host={$dbhost};dbname={$dbname}";
    # データベースハンドルを取得
    try {
        $handle = new PDO($dsn, $dbuser, $dbpassword);
    } catch (PDOException $e) {
        echo "DB接続に失敗しました。<br>";
        echo $e->getMessage();
        exit;
    }

    # データベースハンドルを使って、内包するテーブル一覧を取得
    $sql = "SHOW TABLES";
    try {
        $result = $handle->query($sql);
    } catch (PDOException $e) {
        echo "テーブル一覧の取得に失敗しました。<br>";
        echo $e->getMessage();
        exit;
    }
    # テーブル数を表示
    $num_tables = $result->rowCount();
    echo "<p>データベースには {$num_tables} 個のテーブルがあります。</p>";
    if ($num_tables > 0) {
        # テーブル一覧を箇条書きで表示
        echo "<ul>";
        foreach ($result as $row) {
            echo "<li>{$row[0]}</li>";
        }
        echo "</ul>";
    }
    # 接続を閉じる
    $handle = null;
    ?>
</body>
</html>

これで、test.phpにブラウザでアクセスすると、以下のように見えます。

注釈

ポートビュー経由でブラウザ表示させた後、アドレスを表示して/test.phpを付加することで確認できます。

初期状態ではテーブルが無いので0件と出ます。

PHPでのテスト(テーブル無し)

phpMyAdmin側でテーブルを適当に足してからアクセスしてみると、件数が増えるので確認できます。

PHPでのテスト(テーブル追加後)

PHPコードについて

このテキストはPHPの学習参考書ではありませんので、 データベースへの接続や利用については、各自で調べてください。