phpからPDOを使ってデータベースに接続できなかったときのミス
PHPデータベース接続の勉強中、phpからPDO、またはmysql_connectを使ってデータベースに接続できなかったときの話です。
ものすごくしょうもないミスで時間を浪費したのでメモします。
phpMyadminをよく理解していなかったのが原因でした。
接続時に使うデータベースのユーザ名・パスワードをちゃんと把握しているか?
結論から言うと、ユーザ名とパスワードが間違っていたのが原因です。
あまりにも単純すぎるようですが、同じような勘違いを起こしている人の目に止まればいいなあと思って書きます。
PDOを使ってデータベースに接続するには
まずはおさらい。
PDOを使ってデータベースにアクセスする際の記述は以下のようになります。
データベースはMySQLで動いているものとします。
$pdo = new PDO (mysql:dbname=$dbname;host=$host;charset=$charset,$username,$pass);
$dbnameにはデータベース名
$hostにはホスト名(たいていはlocalhost)
$charsetには文字セット(たいていはutf8)
そして$usernameにはデータベースのユーザ名、$passにはデータベースのパスワードを入れます。
コアサーバーのMySQLはphpMyadminを使って制御されている
まあどのレンタルサーバーもたいていはphpMyadminだとは思います。
で、root権限を貰えるのならrootでデータベースに接続してしまえば手っ取り早いのですが、レンタルサーバーでroot権限がもらえるなんて稀です。
もとより、root権限でデータベースを運用するのはセキュリティ的に問題があるので、普通はデータベースユーザを作成します。
phpMyadminのユーザ名・パスワードと、データベースのユーザ名・パスワードの混同に注意する
コアサーバーでは、コアサーバーでのユーザ名がphpMyadminのユーザ名、そしてFTPパスワードの頭文字4文字がphpMyadminのパスワードに設定されています。
これらは変更することができません。
例として、phpMyadminのユーザ名がsample、phpMyadminのパスワードがabcdだとします。
その状態で、データベースを新たに作成しようと考えて、データベースを作成します。仮に、データベース名はsample_testとします。
そしてデータベースのパスワードは任意で設定できるので、自分のわかりやすいようにtestにしたとしましょう。
phpMyadmin
ユーザ名:sample
パスワード:abcd
データベース
データベース名:sample_test
パスワード:test
以上のような状態になります。
この状態でsample_testに接続したいとき、
$dbname = sample_test;
$host = localhost;
$charset = utf8;
$username = ???;
$pass = ???;
$pdo = new PDO (mysql:dbname=$dbname;host=$host;charset=$charset,$username,$pass);
このデータベース名に入れるべき文字列は当然「sample_test」です。
ホスト名はlocalhostを入れます。
では、ユーザ名とパスワードには何を入れたらいいのか?
ここでsampleとabcdを入れようとした人は、僕と同じミスを犯してデータベースに接続できない可能性が高いです。
しかしやっかいなことに、このときのphpエラーをブラウザ上に表示させると「using password OK」と表示されるんですよね。
「パスワードはあってるのか、ふむふむ。じゃあ別の場所に問題があるな」と思ってしまうとハマってしまってなかなか抜け出せません。
コアサーバの場合、初期ではデータベース名とデータベースユーザ名は同一になっている
今回作成したsample_testに接続したい場合は、以下のように記述します。
$dbname = sample_test;
$host = localhost;
$charset = utf8;
$username = sample_test;
$pass = test;
$pdo = new PDO (mysql:dbname=$dbname;host=$host;charset=$charset,$username,$pass);
広告