РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
⊗dcPhMyQr 29 of 30 menu
◀ ▶

Запрос из сценария в Docker

Запрос из сценария читает строку из базы и показывает её на странице. PDO открывает соединение к mysql:host=db;dbname=app под пользователем app с паролем demo, выполняет SELECT и печатает поле из строки. Переменные окружения можно подставить в строку DSN и учётки.

Сервисы web, app и db как в связке с nginx. У app есть depends_on для порядка старта - он не ждёт готовности сервера, поэтому при первом открытии страницу иногда обновляют. Образ app с pdo_mysql и описание сервисов в одном проекте:

FROM php:8.5-fpm RUN docker-php-ext-install pdo_mysql

Файл compose.yaml:

services: web: image: nginx ports: - "8080:80" volumes: - ./site:/var/www/html - ./default.conf:/etc/nginx/conf.d/default.conf app: build: . environment: DB_HOST: db DB_NAME: app DB_USER: app DB_PASSWORD: demo volumes: - ./site:/var/www/html depends_on: - db db: image: mysql:9.7 environment: MYSQL_ROOT_PASSWORD: demo MYSQL_DATABASE: app MYSQL_USER: app MYSQL_PASSWORD: demo

Конфиг nginx с fastcgi_pass app:9000 и общей папкой ./site:

server { listen 80; root /var/www/html; index index.php index.html; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { fastcgi_pass app:9000; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } }

После подъёма заполним таблицу notes отдельной командой в контейнере базы:

docker compose up -d --build docker compose exec db mysql -uapp -pdemo app -e "CREATE TABLE IF NOT EXISTS notes (id INT PRIMARY KEY AUTO_INCREMENT, body VARCHAR(255)); INSERT INTO notes (body) VALUES ('hello');"

Сценарий читает поле body из первой строки:

<?php $dsn = 'mysql:host=' . getenv('DB_HOST') . ';dbname=' . getenv('DB_NAME'); $pdo = new PDO($dsn, getenv('DB_USER'), getenv('DB_PASSWORD')); $row = $pdo->query('SELECT body FROM notes LIMIT 1')->fetch(PDO::FETCH_ASSOC); echo $row['body'];

Страница по localhost:8080 показывает слово hello из таблицы. Если база ещё не приняла соединение, обновите вкладку через несколько секунд.

Сохраните в таблице messages строку ping и выведите её на странице через PDO с теми же учётными данными app.

Сравните текст в браузере с содержимым поля, которое вернул запрос к базе.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить