質問: null; } catch (PDOException $e) { echo $e->getMessage(); exit; } ``` データベースに情報を追加するというシンプルなコードです。ビルドインサーバーでこの「index.php」にアクセスしたのですが、 「SQLSTATE[HY000] [2002] No such file or directory」 とエラーが出てしまいます。 Googleにてこのエラーを検索にかけて調べた結果、php.ini に mysql.sock のパスを教えなければならないと分かりました。しかし /etc に php.ini というファイルは見つからず、代わりに似たような php.ini.default というファイルが見つかりましたのでそちらの中で ``` pdo_mysql.default_socket= ↓ pdo_mysql.default_socket=/tmp/mysql.sock ``` というように変更をして、もう一度MySQLサーバーを立ち上げて、ビルドインサーバも再起動し index.phpにアクセスすると今度は「SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client」というエラーが代わりに出るようになりました。 ちなみにビルドインサーバーを立ち上げる時は ``` php -S localhost:8000 ``` を実行して localhost:8000 にアクセスしています。 もう二時間くらい色々試してはいるんですが全く分かりませんでした。 本当によろしくお願いします。 OS Mac10.14.6 MySQL 8.0.18 PHP 7.1.32
回答: **雑な回答なので、誰かの補完を待ったほうが良いかも** mysql.sock の件は、リスタートによって解消されていると思われます。 「php.ini.default」の編集とは無関係です。。。 「SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client」は MySQL の8系を使用したことによるメッセージなので、上記メッセージで検索してみてください。 ピンポイントに Mac 用の回答をすぐに見つけられませんでしたので、参考まで。 **ちょっと雑すぎたので追記** MySQL Functions (PDO_MYSQL) に以下の記述があります。 > > This is because MySQL 8 defaults to caching_sha2_password, a plugin that is not recognized by the older PHP (mysqlnd) releases. Instead, change it by setting default_authentication_plugin=mysql_native_password in my.cnf. The caching_sha2_password plugin will be supported in a future PHP release. In the meantime, the mysql_xdevapi extension does support it. > > > MySQLi でも同様なので、php から MySQL 8 系を使用する場合は、当面 my.cnf を変更して使用することになります。