我是 PHP 新手,我正在尝试开始使用它。
我一直在遵循本指南,为使用 Docker 的未来项目创建 PHP 样板(我不想使用 XAMPP,因为我喜欢让我的生活变得更艰难,哈哈)。
一切正常,只是我无法连接到 MySQL 数据库。我尝试过在 Stack Overflow 上进行谷歌搜索和搜索,但没有一个解决方案对我有用。无论我尝试什么,我每次都会收到以下错误:
PDOException: SQLSTATE[HY000] [1044] Access denied for user 'admin'@'%' to database 'my_local_db' in /app/public/index.php:14 Stack trace: #0 /app/public/index.php(14): PDO->__construct('mysql:host=db;d...', 'admin', Object(SensitiveParameterValue)) #1 {main}
这是我在 docker compose 中的数据库服务:
db:
image: mysql:latest
restart: always
volumes:
- ./database:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: "root"
MYSQL_DATABASE: "my_local_db"
MYSQL_USERNAME: "admin"
MYSQL_PASSWORD: "admin"
ports:
- 3306:3306
这是我的
index.php
文件:
<?php
$host = "db";
$db_name = "my_local_db";
$username = "admin";
$password = "admin";
try {
$dbh = new PDO("mysql:host=$host;dbname=$db_name", $username, $password);
echo '<h4 style="color: green">Connected to database sucessfully.</h4>';
}
catch (PDOException $e) {
echo $e;
echo '<h4 style="color: red">Fail to connect to database.</h4>';
}
我已将带有错误的整个项目上传到我的 GitHub 存储库,以防有人想看一下。
非常感谢您的帮助!
试试这个,
第一步:修复 Docker Compose 文件:将 MYSQL_USERNAME 替换为 MYSQL_USER
db:
image: mysql:latest
restart: always
volumes:
- ./database:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: "root"
MYSQL_DATABASE: "my_local_db"
MYSQL_USER: "admin"
MYSQL_PASSWORD: "admin"
ports:
- 3306:3306
第二:
docker-compose down
docker-compose up -d --build
第三: 验证 PHP 代码:您的 index.php 代码没有问题。确保凭据匹配。
第四:
Test MySQL Connection: Use CLI to verify
docker exec -it <mysql_container_id> mysql -uadmin -padmin my_local_db
最后只需根据需要授予权限:
GRANT ALL PRIVILEGES ON my_local_db.* TO 'admin'@'%';
FLUSH PRIVILEGES;