macでいきなりはじめるPHPにチャレンジする!(3) mySQL編


はじめに

前回までの記事ではPHPを始めるにあたっての設定を書いてきました。「いきなりはじめるPHP」の本では初期設定の後、アンケートページを作成し、それをmySQLに保存するというプロセスで進んでいきます。
このうちアンケートページの作成は、本の通りに作れば問題なく動作するのでここでは省きます。

これまでの記事でも書いたように、mySQLの起動、本ではXAMPPを使用していますが、macではMAMPを使用した方が良いとされています。MAMPでは操作方法や、コードなどが一部異なっているので、本の丸写しだとエラーとなってしまったり、また操作方法がわかりにくいことがあります。ここではその辺りの操作の違いを中心に書いていきます。

mySQLの起動、データベースの作成

mySQLの起動は、MAMPではローカルサーバーの起動と同時に行われます。詳しくは(1)に記載しています。
ローカルサーバーを起動すると、スタートアップ画面が表示されますが、それを下にスクロールするとPHP、MySQL、SQLiteの3つの管理メニューがあります。MySQLをクリックすると画像のような画面になります。

ここからphpMyadminをクリックすると、データベース参照、作成ページに飛ぶことができます。もちろんこれ以外の方法でもデータベースをいじくることはできるそうですが、本ではphpMyadminを使用する方法が書かれているので、それで進めていきます。

phpMyadminについて、操作方法は本と現在ではややレイアウトが異なるものの、ほぼ同じです。

アクセスするとこんな画面から始まります。Languageで日本語を選ぶと日本語化されるのでより操作しやすいと思います。


データベースの作成もこの新規作成をクリックして、名前、照合順序を入れるだけで簡単に作れます。ちなみにmySQLのフォルダーの中に新しく作るのではなく、普通に新規作成をクリックしたらいいそうです、僕はなぜか読み違えて、mySQLのフォルダーの中に丁寧に作っていました・・・
作成したデータベースをクリックするだけで、テーブル、カラムの作成がかんたんにできます。やはりグラフィカルに操作できるのは素晴らしいなと思いました。

データベースへの接続

データベースへの接続は本に載っているコードだと以下のようになっています。

thanks.php
<?php
$dsn='mysql:dbname=phpkiso;host=localhost';
$user='root';
$password='';
$dbh=new PDO($dsn, $user, $password);
$dbh->query('SET NAMES utf8');

〜(真ん中は省略)

$sql = 'INSERT INTO anketo(nickname,email,goiken)VALUES("'.$nickname.'","'.$email.'","'.$goiken.'")';
$stmt = $dbh->prepare($sql);
$stmt->execute();

MAMPの場合、このコードだとエラーが出ます。その理由はmySQLのパスワードが空っぽになっていることです。上に貼った1枚目の画像にある通り、passwordは初期だとrootになっているので、それを指定しないといけません。
それに加えて修正すべき点として、文字コードの指定部分です。文字コードはデータベースの文字化けを防ぐため指定する必要がありますが、現在のバージョンのPHPでは脆弱性が発生するのを避けるためSETNAMESを使用しないそうです。
ちなみに$sql=以下の部分は、変更の必要はないそうです。
そこで以下のようなコードに、調べながら変更しました。

thanks.php
<?php
$dsn='mysql:dbname=phpkiso;host=localhost;charset=utf8';
$user='root';
$password='root';
$dbh=new PDO($dsn, $user, $password);

このようにpasswordを指定し、また文字コードの指定部分を頭に持ってきました。これでエラーなくMySQLに接続できました!

MySQLのみ切断する

MAMPでは前述の通り、ローカルサーバーを起動すると自動的にMySQLに接続されてしまいます。なのでサーバーだけを起動させて、MySQLを止めるということができません。これの何が問題かというと、本の中にもデータベースに接続できなかった時の障害発生を示す文章を表示させる方法がありますが、それが実際に表示できるかどうか容易に確認できません。
そこでmySQLのみを切断する方法を調べたところ、ターミナルで以下のコードを入れればいいそうです。

/Applications/MAMP/bin/stopMysql.sh

みたままMAMPのstopMysqlを作動させるという形のコマンドになっています。これを入れるとMySQLを止めることができるのですが・・・MAMPの最新バージョンだとMySQLの作動ランプがなく、一目で作動が分からなくなっています。なので実際にデータを送信して試すしかないようです。
ちなみに一度サーバーを停止し、改めて起動するとmySQLも起動することができます。

まとめ

ここまで3つの記事でまとめたように進めると、macおよびMAMPを使用している環境下でも無事にこの本一冊を終えることができました。少しでも参考になれば幸いです!初学者なので間違いなどがあるかもしれません、何かあればご指摘をよろしくお願いいたします。