PDOで接続エラーが出たときの原因とチェックリスト

当サイトではアフィリエイト広告を利用しています

PHPでデータベース(MySQL)に接続しようとして、こんなエラーが出たことはありませんか?

または

はじめのうちは

  • 何が間違っているのか分からない
  • エラーメッセージが怖い
  • どこを直せばいいのか見当がつかない

という状態になりがちです。

でも安心してください。
PDOの接続エラーは、ほぼ決まった原因パターンがあります。
この記事では、初心者向けに「上から順番に確認すれば解決できるチェックリスト」をまとめました。

1.DSNの書き方は正しいか?

PDO接続の基本の書き方はこちらです。

よくあるミスでは下記のものがあります。

  • dbnameのスペルミス
  • hostの書き忘れ
  • ;(セミコロン)を忘れている
  • 全角文字が混ざっている
  • データベース名が間違っている
  • 不要なスペースが混ざっている

特に初心者に多いのが「データベース名が間違っている」です。
参考書などを見ながら内容を理解せずにプログラムを書いているとデータベース名が実際の名前と異なってしまうことがあります。データベースを開いて実際の名前を確認して正しい名前を書くようにしましょう。

2.ユーザー名・パスワードは正しいか?

考えられる原因は下記のものがあります。

  • パスワードが違う
  • rootにパスワードが設定されている
  • そもそもそのユーザーに権限がない

ローカル環境の場合、初期状態では

  • ユーザー名:root
  • パスワード:空文字('')

であることが多いです。

もし自分でパスワードを変更しているなら、必ず合わせましょう。

3.MySQLは起動しているか?

意外と多いのがこれです。MySQLが「Running」になっているかもう一度確認しましょう。

停止している場合は当然接続できません。

4.「could not find driver」と表示される場合

このエラーは PHP側の設定ミス です。「pdo_mysql」が有効になっていない場合があります。

1.確認方法

2.php.ini を開く

3.以下の行を探す

4.先頭の ;(セミコロン) を削除する

これで解決することがほとんどです。

エラー内容主な原因対処方法
Access denied認証失敗ユーザー名・パスワード確認
could not find driver拡張未有効php.ini確認
No such file or directoryソケット問題hostを127.0.0.1に変更
Unknown databaseDB名間違いdbname確認

エラーは怖いものではなく、「ヒント」です。

メッセージをちゃんと読めば、ほぼ原因が書いてあります。

プログラムでは必ず try-catch を使い、エラー内容を確認できるようにしましょう。

エラーメッセージは英語で表示されるので苦手意識を持つことも多いかもしれませんが
翻訳機能などを使用して、どこでどのようなエラーが出ているかよく見てみましょう。

以下をもう一度確認しましょう。

  • コピペではなく手入力していないか
  • 不要なスペースが入っていないか
  • 全角と半角が混ざっていないか

実は、エラーの原因は単純なミスが9割です。

PDOの接続エラーは、ほとんどが次の4パターンです。

  • DSNの書き間違い
  • 認証情報の間違い
  • MySQLが起動していない
  • pdo_mysqlが有効になっていない

焦らず、上から順番にチェックすれば必ず解決できます。
エラーは「失敗」ではなく「原因を教えてくれているメッセージ」です。
落ち着いて一つずつ潰していきましょう。