PHP - MySQL接続で”Unknown database xxx"と怒られる


はじめに

最近PHPを勉強していて、db接続周りで小ハマりしたのでその原因と解決をメモ。


現象

PHPMySQLに接続したく、PDOを用いて↓のようなコードを書いた。データベースhogeにユーザhostman, パスワードpasswordで接続したい。

$dsn = "mysql:dbname=hoge";
$host = "hostman";
$pw = "password";

$pdo = new PDO($dsn, $host, $pw);
$stmt = $pdo-query("SELECT * FROM table_name");
...

実行すると、

PHP Fatal error:  Uncaught PDOException: SQLSTATE[HY000] [1049] Unknown database 'hoge'

と怒られる..。データベースhogeなんて知りませんよと。

データベースhogeは存在するし、MySQLもちゃんと動いてる..。なぜだ、、


原因

僕の環境ではMAMPで開発しており、MAMPにバンドルされたMySQLを使いたいのですが、どうやら元からインストールされていたMySQL(MAMPバンドルではないMySQL)に接続していたようでした。


解決策

間違って接続していたMySQLはデフォルトのポート3306番で動いています。ポート番号を指定せずにPDOで接続すると、デフォの3306番ポートをみにいくようです。

MAMPバンドルのMySQLのポートを見ると、3307番で動いていました。(自分で変更してた..w)

なので、ポートを3307番に指定すれば解決です。↓のように修正したらちゃんと動きました。

//ポート番号を指定
$dsn = "mysql:dbname=hoge;port=3307";
$host = "hostman";
$pw = "password";

$pdo = new PDO($dsn, $host, $pw);
$stmt = $pdo-query("SELECT * FROM table_name");
...