Yii2 / PHP: Проверьте соединение с MySQL и PostgreSQL - PullRequest
0 голосов
/ 09 января 2019

Когда я запускаю свое приложение Yii2 / PHP, как я могу проверить, если / подождать, пока база данных не будет запущена?

В настоящее время с MySQL я использую:

$time = time();
$ok = false;
do {
  try {
    $pdo = new PDO($dsn,$username,$password);
    if ($pdo->query("SELECT 1 FROM INFORMATION_SCHEMA.SCHEMATA")) 
        $ok=true;
  } catch (\Exception $e) {
    sleep(1);
  }
} while (!$ok && time()<$time+30); 

Теперь я хочу, чтобы мое приложение работало с MySQL и PostgreSQL.

Но SELECT 1 FROM INFORMATION_SCHEMA.SCHEMATA не работает в PostgreSQL.

Существует ли оператор SQL (использующий связь с базой данных PDO), который работает в обеих системах баз данных, чтобы проверить, работает ли база данных?

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Yii2 имеет свойство проверять, существует ли соединение или нет, для этого на самом деле нет необходимости создавать сценарий, поскольку в этой платформе реализована абстракция для поддерживаемых баз данных ( $ isActive свойство ).

$ isActive Открытое свойство только для чтения. установлено

public boolean getIsActive ()

Вы можете выполнить проверку в вашем default controller следующим образом:

<?php

class DefaultController extends Controller 
{
    public function init()
    {
        if (!Yii::$app->db->isActive) {
            // The connection does not exist.
        }

        parent::init();
    }
}

Не рекомендуется форсировать ожидание соединения с базой данных, если нет особых требований. Наличие подключения к базе данных должно быть обязательным требованием для запуска приложения, и приложение не должно «ждать» доступности базы данных.

Существуют способы запуска контейнеров в Docker упорядоченным образом или с особыми требованиями, эта ссылка может дать вам лучший вариант вместо делегирования этого приложению.

0 голосов
/ 09 января 2019

Вы можете использовать SELECT 1, который является стандартным SQL.

Вы можете использовать dbfiddle для тестирования различных серверов.

Сервер может отключиться в любое время, поэтому проверка ответа на ошибку при каждом запросе является гораздо лучшим подходом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...