在启动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条答案
按热度按时间ycggw6v21#
你可以用
SELECT 1
这是标准的sql。可以使用dbfiddle对各种服务器进行测试。
服务器可以随时离开,因此检查每个查询的错误响应是一种更好的方法。
ijnw1ujt2#
yii2有一个属性来验证连接是否存在,实际上不需要为此创建脚本,因为这个框架为它支持的数据库实现了一个抽象($isactive属性)。
$isactive public只读属性是否建立了数据库连接
公共布尔getisactive()
你可以在你的房间里办理登机手续
default controller
按以下方式:除非有非常具体的要求,否则强制等待与数据库的连接不是一种好的做法。数据库连接的可用性必须是应用程序启动的强制性要求,应用程序不应“等待”数据库可用。
有很多方法可以有序地运行docker中的容器,或者有特定的需求,这个链接可以为您提供一个更好的选择,而不是将其委托给应用程序。