尝试使用 PDO 连接到 MySQL 数据库时出现一致访问被拒绝错误

问题描述 投票:0回答:1

我是 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 存储库,以防有人想看一下。

非常感谢您的帮助!

php mysql docker-compose pdo
1个回答
0
投票

试试这个,

第一步:修复 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;
© www.soinside.com 2019 - 2024. All rights reserved.