プログラミング・PHP初心者です。
docker-composeでPHPからmysqlに接続したところ、↑のようなエラーがでます。
ルートユーザーではアクセスできるのですが、’sample’ユーザーではアクセスできません。
こちらなどを見てみると、認証方式が違うことが原因とありますが、今の認証方式は
+------------------+-----------+-----------------------+ | root | % | mysql_native_password | | mysql.infoschema | localhost | caching_sha2_password | | mysql.session | localhost | caching_sha2_password | | mysql.sys | localhost | caching_sha2_password | | root | localhost | mysql_native_password | | sample | localhost | mysql_native_password | +------------------+-----------+-----------------------+
となっています。
view.php
php
1<!DOCTYPE html> 2<html lang="en"> 3<head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 <title>PHPのテスト</title> 7</head> 8<body> 9 <?php 10 $db_user = 'sample' ; 11 $db_password = 'password'; 12 $db_host = 'db'; 13 $db_name = 'sampledb'; 14 $db_type = 'mysql'; 15 16 $dsn = "$db_type:host=$db_host;dbname=$db_name;charset=utf8"; 17 18 try{ 19 $pdo = new PDO($dsn, $db_user, $db_password); 20 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 21 $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 22 print ('接続しました。'); 23 24 }catch(PDOException $Exception){ 25 die('エラー:'. $Exception->getMessage()); 26 27 } 28 29 30 ?> 31 32</body> 33</html>
docker-compose.ym;
version: "3.7" services: php: build: ./docker/php volumes: - ./server:/var/www depends_on: - db nginx: image: nginx ports: - 80:80 - 8000:8000 volumes: - ./server:/var/www - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf depends_on: - php db: # Dockerfileの相対Path build: ./docker/mysql/ # 環境変数としてパスワードを設定 environment: MYSQL_ROOT_PASSWORD: password # データの保存場所を設定 volumes: - mysql-data:/var/lib/mysql ports: - 3306:3306 volumes: mysql-data:
my.cnf
character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci default_authentication_plugin=mysql_native_password sql_mode=STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION [client] default-character-set=utf8mb4 コード
よろしくお願いします。