質問: いつも質問ばかりになってしまいすみません。 タイトルの通り、当該の本を本日から初めていきなり詰まっています。 私の現在の環境は、 Mac ElCapitan 10.11.3にMAMPをインストールして実行中です。 操作がうまく行かず詰まっている状況は以下の通りです。 1該当箇所は、Chapter 2-4 2自分で打ち込んだソースでは 「ただいま障害により大変ご迷惑をおかけしております。」 しか出ない。 出版社からリリースされている改定箇所を変えた後も前もこのメッセージしか出ない。 3staff_add.php /staff_add_check.php /staff_add_done.php のここまでの全ファイルをサンプルソースコードに切り替えても、「ただいま障害により大変ご迷惑をおかけしております。」しか出ない。 4念のため、GoogleChromeでstaff_add_check.phpの画面を検証したら、 下の添付のように name と暗号化された pass が staff_add_done.php へ運ばれてました。 ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/2753b9d50073b0280d69f1f2c47d190c.png) 5私のMySQLの起動が悪いのかと思ったのですが、 MySQL自体は起動しており、作成したshopデータベースに mst_staff テーブルも作成されています。 初日から早速挫折しそうです。 お助け下さい。よろしくお願い致します。
回答: 5時間ハマってましたが解決しました。 どうも、教科書の文章ではPHPとSQLの接続が出来無いようです。 備忘録として、こちらにまとめます。(MacでMampユーザーの場合に限定されるかもしれませんが、、、) PDO構文を使ってPHPからSQLへデータを遷移させたい場合、 SQLで利用する特定のユーザー名対して全てのユーザー権限を付与する必要があるようです。 ユーザー権限の付与がされてない場合は、 PHPからPDO構文でSQLへの接続を行うと↓こんな感じのエラーで接続を拒絶されると思います。 !イメージ説明 (*try/catch構文を使っている場合だと、catch側の命令が実行されると思います。) そういった方は、 1ターミナルで下のコマンドを実行して、今自分のMySQLに設定されているユーザー名とホスト名を確認できます。 !イメージ説明 2続いて、不要なユーザー名とホスト名は下のコマンドで削除します。 mysql> DROP USER 'root'@'%'; 3さらに、これから利用するユーザー名(今回は:root) とホスト名(今回は:localhost) を下のコマンドで作成し、 2行目のコマンドでパスワードを設定してあげます。(パスワード不要なら''で構わない。) mysql> CREATE USER 'root'@'localhost'; mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('***'); 4最後に、このユーザー名とホスト名に以下のコマンドで権限を与えます。 mysql> grant all on *.* to 'root'@'localhost'; これで、PHPからSQLへの接続が許可されます。 また、PHPからSQLへの接続に必要なコードは以下の通りです。 *このコマンドは、著書「気づけばプロ並みPHP」 に書かれたコードとは違います。 *SQLへ接続できた場合はtryの中を、できなかった場合はcatchの中が返ります。 try{ $dsn='mysql:dbname=shop;host=localhost;charset=utf8'; $dbh = new PDO('mysql:host=ホスト名;dbname=データベース名;charset=utf8', 'ユーザー名','パスワード',array(PDO::ATTR_EMULATE_PREPARES => false)); #ここにSQLへの実行命令を記載 }catch (Exception $e){ print 'ただいま障害により大変ご迷惑をお掛けしております。'; exit(); }