質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.05%

phpとmysqlとのPDO接続を試みたところThe server requested authentication method unknown to the clientというエラーが起きました!

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 370

PDO接続を試みようとして
モジュールのインストール(RUN docker-php-ext-install mysqli pdo pdo_mysql mbstring)と
php.iniファイルでmysqlのdllを設定(extension=php_pdo_mysql.dll)を行いましたが、

(SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client)
サーバーがクライアントに認識されていない認証方法を要求しました

というエラーが起きました。
MAMPとXAMPから卒業したいです💦お助けください…

phpとmysqlのバージョン

php:7.1.9-fpm-alpine
mysql:8.0.20

index.phpファイル

<?php

// phpinfo();
define('HOSTNAME', '99f78bd4e0db');
define('DATABASE', 'practice');
define('USERNAME', 'root');
define('PASSWORD', 'root');

try {
/// DB接続を試みる
$db = new PDO('mysql:host=' . HOSTNAME . ';dbname=' . DATABASE, USERNAME, PASSWORD);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$msg = "MySQL への接続確認が取れました。";
} catch (PDOException $e) {
$isConnect = false;
$msg = "MySQL への接続に失敗しました。<br>(" . $e->getMessage() . ")";
}
?>
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>MySQL接続確認</title>
</head>

<body>
<h1>MySQL接続確認</h1>
<p><?php echo $msg; ?></p>
</body>

</html>

php.iniファイル

expose_php = Off
error_reporting = E_ALL
display_errors = On
log_errors = On
log_errors_max_len = 4096
error_log = "/var/log/php_errors.log"
default_charset = "UTF-8"
date.timezone = "Asia/Tokyo"
mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.http_input = auto
mbstring.detect_order = auto
extension=php_pdo_mysql.dll

Dockerfile

FROM php:7.1.9-fpm-alpine

RUN docker-php-ext-install mysqli pdo pdo_mysql mbstring

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

+1

define('HOSTNAME', '99f78bd4e0db');

define('HOSTNAME', 'localhost')ではないのでしょうか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/05/18 21:24

    エラーがすでに吐かれているので微妙ですが

    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    もつけておいたほうがよいかも・・・

    キャンセル

  • 2020/05/18 22:38 編集

    お返事ありがとうございます!

    localhostにすると、
    (SQLSTATE[HY000] [2002] No such file or directory)
    というエラーに変わりました。
    Dockerではサービス名またはコンテナ名がホスト名のようです。
    docker execコマンドでmysqlのコンテナに入ってhostnameコマンドで調べた時、
    mysqlのコンテナIDが出てきたのでそこは間違いないと思います。

    一応、$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    もつけときましたが変化はありませんでした。

    キャンセル

check解決した方法

0

PDO接続できなかったのは、ホスト名を間違えていたからでした。
docker psで表示した時、NAMEの場所に出てくるnginx_phpfpm_mysql_db_1ではなくdbです。
ymlファイルにdbって自分で定義したのに………沼にハマってしまったんですね 笑
他にもIPを書く方法もありますが、コンテナ生成時IPが変動するのでやめといた方いいみたいです。

mammp,xammpもこれでおさらばです!
新たな環境を求めてレッツゴー( ̄∇ ̄)
   

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

PDO接続できなかったのは、ホスト名を間違えていたからでした。

docker psで表示した時、NAMEの場所に出てくるnginx_phpfpm_mysql_db_1ではなくdbです。
ymlファイルにdbって自分で定義したのに………沼にハマってしまったんですね 笑
他にもIPを書く方法もありますが、コンテナ生成時IPが変動するのでやめといた方いいみたいです。

mammp,xammpもこれでおさらばです!
新たな環境を求めてレッツゴー( ̄∇ ̄)

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.05%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • トップ
  • PHPに関する質問
  • phpとmysqlとのPDO接続を試みたところThe server requested authentication method unknown to the clientというエラーが起きました!