Think, Express, Action

20代後半女性。文系プログラマー。TOEIC910点。インドが好き。旅行、節約、料理、読書が好き。IT系の記録や日記を書き残すブログ,

【解決方法と原因】PHPでConnection failed: SQLSTATE[HY000] [2002] のエラー

「いちばんやさしいPHPの教科書」のテキスト通りに、Chapter4のデータベースに接続しようとしてMySQLに接続できない現象があったのでメモ。

 

問題の原因は、 MySQLの8888のポートに接続しようとしたが、実際は8889に設定されているので接続できない、ということだった。

 

 

エラー箇所はPDOをnewしている行らしいのだが、原因が不明だったため、try catch構文を入れ、エラー原因をgetMessage()で取得した。すると、

エラーコード

Connection failed: SQLSTATE[HY000] [2002]~

どうやらMySQLの接続に失敗しているらしい。

ソースコード

<?php

$user = "●●●";

$pass = "●●●";       

$dsn = "mysql:dbname=db1;host=localhost;    charset=utf8";        

try{ 

     $dbh = new PDO($dsn, $user, $pass);           

     $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);           

     $sql="SELECT * FROM recipes";          

     $stmt = $dbh->query($sql);           

     $result = $stmt->fetchAll(PDO::FETCH_ASSOC);           

     print_r($result);       

     $dbh = null;       

}      

catch(PDOException $e){           

      echo 'Connection failed: ' . $e->getMessage();       

?>

 

MySQLのportを8889に指定したところ、エラーが消え正常に実行結果を表示した。

  

誤:$dsn = "mysql:dbname=db1;host=localhost;    charset=utf8";    

正:$dsn = "mysql:dbname=db1;port=8889;host=localhost;    charset=utf8";  

 

 

参考になったのはstackoverflowのこの記事。

 

stackoverflow.com

  

MAMPで見たときの、各ツールのPort番号。

ここを確認して、デフォルトの8888 と違う、MySQL ポート番号が(ここでは8889)が設定されていたら、ソースコードでも8889と指定すること。そうでないと、8888につなぎに行くからね!

f:id:thinkexpress:20170905000617p:plain

 

おわりっ! 

このエントリーをはてなブックマークに追加