このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

PHP+Apache+MySQLの開発環境コンテナ②

PHP+Apache+MySQLの開発環境コンテナ①」の続きです。

「PHP+Apache+MriaDBの開発環境コンテナ」は次の2部に分けて解説しています。

 ここでは、データベースに接続するPHPプログラムの作成とWebブラウザからコンテナに接続して、作成したプログラムを実行していきます。

「Apache+PHP」コンテナとMySQLコンテナの構成

以下のように「Apache+PHP」コンテナとMySQLコンテナで構成しています。

 MySQLのデータは「db-data」という永続的なボリュームに保存し、「PHP+Apache」コンテナのデータはホストマシンの「./src」ディレクトリにバインドマウントさせています。

PHPプログラムの作成

「src」ディレクトリの中に「index.php」ファイルを作成します。

・「code ./src/index..php」コマンドを実行します。

PS C:\Users\joeac\Desktop\docker\phpdev2> code ./src/index.php

VS Codeが起動します。

・次のPHPプログラムを入力します。

<?php
// データベース接続情報
$host = 'db'; // Docker ComposeでのMySQLサービス名
$dbname = 'test-db';
$user = 'test-user';
$pass = 'test-pass';

// 待機時間を設定してMySQLサービスが起動するのを待つ
$max_attempts = 10;
$attempt = 0;
while ($attempt < $max_attempts) {
    try {
        // データベースに接続
        $pdo = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);
        break;
    } catch (PDOException $e) {
        // エラーが発生した場合は数秒待機して再試行する
        sleep(1);
        $attempt++;
    }
}

if ($attempt === $max_attempts) {
    echo "データベース接続エラー: MySQLサービスが起動しませんでした\n";
    exit(1);
}

try {
    // テーブル作成クエリ
    $sql = "CREATE TABLE IF NOT EXISTS test_table (
        id INT AUTO_INCREMENT PRIMARY KEY,
        name VARCHAR(255) NOT NULL
    )";
    
    // テーブルを作成
    $pdo->exec($sql);
    
    echo "データベース接続成功、テーブル作成成功\n";
} catch (PDOException $e) {
    // エラーが発生した場合はエラーメッセージを表示
    echo "テーブル作成エラー: " . $e->getMessage() . "\n";
}
?>

コンテナへの接続

・Webブラウザを起動して、URLに「localhost」と入力します。

「データベース接続成功、テーブル作成成功」と表示されます。

エラーが表示される場合は、「index.php」のユーザー名やパスワードなどを確認してみてください。

関連コンテンツ