01hana
@01hana

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

PHPでPDOを使ってMySQLに接続する方法

解決したいこと

PDOを使ってMySQLに接続したいがエラーが発生しました。
解決方法を教えてください。

発生している問題・エラー

SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client

該当するソースコード

//.env_local
MYSQL_USER=user
MYSQL_PASSWORD=pass
MYSQL_ROOT_PASSWORD=root
MYSQL_DATABASE=mzn
MYSQL_HOST=mzn_db
TZ=JST-9
<?php
/*
host: 127.0.0.1
user: user
pass: pass
database: mzn
port: 3366
*/
//PDOオブジェクトを生成し、MySQLに接続します。
$dsn = "mysql:dbname=mzn; host=127.0.0.1";
$user = "user";
$pass = "pass";
try {
    $dbh = new PDO($dsn, $user, $pass);
    echo "接続に成功しました";
} catch (PDOException $e) {
    echo "エラーメッセージ:" . $e->getMessage();
}
0

1Answer

出ているエラーメッセージ

SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client

は、サーバが求めている「認証方法」を、クライアントが理解できていないということを示しています。

つまり、サーバ(MySQL)側が新しくて、クライアント(PHP)が古いバージョンになっている(あるいはサポートしていない)ということだと思います。

お使いの MySQL / PHP のバージョンがわかりませんので、以下は推測です。

MySQL 8 では認証方法として caching_sha2_password が追加されたようです。

PHP は 7.1 系では 7.1.16 で、7.2 系では 7.2.4 で、それをサポートしました。
つまりそれより前のバージョンの PHP を使っていると、上記のエラーが出るはずです。

PHP 7.1.16 より前のバージョン、もしくは PHP 7.2.4 より前の 7.2系の PHP では、 MySQL 8 サーバのデフォルトパスワードプラグインを mysql_native_password に設定するようにしてください。

この場合の対策としては、大きく2つあって

  • PHP を上記のバージョン以上にする
  • MySQLの設定を変えて、 mysql_native_password という認証方法に変更する

だと思います。

もし設定を変える場合、既存のユーザーの認証方法を変えることと、今後新規ユーザーを作る場合のデフォルト値を変える必要があります。

参考になると思われる Qiita 記事をご紹介します

0Like

Comments

  1. @01hana

    Questioner

    ご回答いただきまして、ありがとうございます。
    確認し、無事にできました!

Your answer might help someone💌