我正在使用 PHP 和 PDO 连接到我的数据库。
我想开始使用环境变量,因此我使用了以下终端命令:
composer require vlucas/phpdotenv
我的 .env 文件现在包含以下值:
DATABASE_HOSTNAME=db
DATABASE_NAME=myDb
DATABASE_USERNAME=user
DATABASE_PASSWORD=test
我的测试数据库连接文件如下所示:
<?php
require_once __DIR__ . "/vendor/autoload.php";
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();
$host = getenv("DATABASE_HOSTNAME");
$dbname = getenv("DATABASE_NAME");
$dbuser = getenv("DATABASE_USERNAME");
$dbpass = getenv("DATABASE_PASSWORD");
try{
$dbc = new PDO("mysql:dbname=$dbname;host=$host;port=3306", $dbuser, $dbpass);
$dbc->SetAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
echo "Conneciton failed: " . $e->getMessage() . "<br/>";
}
?>
我收到以下错误:
Conneciton failed: SQLSTATE[HY000] [2002] No such file or directory
我将此代码添加到测试数据库连接文件中:
echo "X" . getenv('X');
echo "host is " . $host;
在终端中,我输入:php test.php
并且它回应了以下的观点:
Xhost is %
以下是屏幕截图:
我究竟做错了什么?
这是因为Dotenv 库默认未填充
getenv
。putenv
如果使用该函数,则应该使用
$_ENV
它来读取变量,否则请查看https://github.com/vlucas/phpdotenv?tab=readme-ov-file#putenv-and-getenvcreateImmutable
上的文档