yii2/php:检查mysql和postgresql的连接

8dtrkrch  于 2021-06-15  发布在  Mysql
关注(0)|答案(2)|浏览(616)

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

ycggw6v2

ycggw6v21#

你可以用 SELECT 1 这是标准的sql。
可以使用dbfiddle对各种服务器进行测试。
服务器可以随时离开,因此检查每个查询的错误响应是一种更好的方法。

ijnw1ujt

ijnw1ujt2#

yii2有一个属性来验证连接是否存在,实际上不需要为此创建脚本,因为这个框架为它支持的数据库实现了一个抽象($isactive属性)。
$isactive public只读属性是否建立了数据库连接
公共布尔getisactive()
你可以在你的房间里办理登机手续 default controller 按以下方式:

<?php

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

        parent::init();
    }
}

除非有非常具体的要求,否则强制等待与数据库的连接不是一种好的做法。数据库连接的可用性必须是应用程序启动的强制性要求,应用程序不应“等待”数据库可用。
有很多方法可以有序地运行docker中的容器,或者有特定的需求,这个链接可以为您提供一个更好的选择,而不是将其委托给应用程序。

相关问题