繁体   English   中英

Yii2 / PHP:检查与MySQL和PostgreSQL的连接

[英]Yii2/PHP: Check connection to MySQL and PostgreSQL

启动我的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数据库连接)可以在两个数据库系统上运行,以检查数据库是否已启动并正在运行?

Yii2具有验证连接是否存在的属性,实际上没有必要为此创建脚本,因为该框架具有为其支持的数据库实现的抽象( $ isActive属性 )。

$ isActive public read-only property是否建立了DB连接

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中运行容器,这个链接可以为您提供更好的选择,而不是将其委托给应用程序。

您可以使用标准SQL的SELECT 1

您可以使用dbfiddle来测试各种服务器。

服务器可以随时消失,因此检查每个查询的错误响应是一种更好的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM