PHP - MySQL接続で”Unknown database xxx"と怒られる
はじめに
最近PHPを勉強していて、db接続周りで小ハマりしたのでその原因と解決をメモ。
現象
PHPでMySQLに接続したく、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");
...