• DBへ接続できませ
    ん。 ユーザー登録画面からEmail,パスワードを入...
  • ジュンジュン 
    DBへ接続できません。
    ユーザー登録画面からEmail,パスワードを入力し、登録ボタンを押すと、「エラーが発生しました。しばらく経ってからやり直してください。」とエラーメッセージが表示され、err_logをみると
    エラー発生:SQLSTATE[HY000] [2002] No such file or directory とエラーが返ってきます。
    このエラーを調べてみたところ、ソケットにパスを指定すると治ると書いてあり、signup.phpの89行目のDBへの接続準備のところに
    $dsn = 'mysql:dbname=freemarket;host=localhost;charset=utf8;unix_socket= /tmp/mysql/mysql.sock'; と入力してみたのですが、変わらず同じエラーが返ってきます。
    他の方の質問であったように各カラムにNULLを入れてみたり、MAMPをアップデートしてみてもダメでした。
    どうしたら改善されるでしょうか?
    よろしくお願いいたします。

    回答 1

    ジュン 
    先ほど解決いたしました。
    まずホスト名をhost=127.0.0.1; に変えたところ、
    エラー発生:SQLSTATE[HY000] [2002] Connection refusedというエラーに変わりました。このエラー文を調べてみたのですが、自分にはどの記事の内容も理解できず、ホスト名をhost=localhost;に戻してみたところ、DBへ接続されました。
    なぜ解決できたのかわからないのですが、教えていただけますでしょうか?

    返信者画像

    ウェブカツ!!コーチ 
    講師からの回答
    phpからデータベース(MySQL)へは「ソケット接続」という接続方法で接続するため、ソケットファイルというものが必要になります。
    ソケットファイルの場所がphp.iniで正しく設定されていれば問題ないですが、たまにパス誤りがあるため、その場合にphp.iniのパスを変更するか、コードに記述するかしてサーバーを再起動する必要があります。

    hostを変えて戻したところ直ったというのはよく分かりませんが、おそらくそれ自体は関係ないかと思います。
    サーバーが再起動されていなかったのか、設定が反映されるまでに時間がかかっていたのかもしれませんね。

    https://ja.stackoverflow.com/questions/31420/sqlstatehy000-2002-no-such-file-or-directory

    https://qiita.com/yakimeron/items/a6310bc5232eb76bae3a
    (コメント欄に解説の記載あり)

    ジュン 
    php.iniのパス設定と再起動は行ったので、もしかしたら反映されるまでに時間がかかっていたのかもしれません。
    あまり深く考えずにとりあえず進めてみます。
    ありがとうございました。