[PHP]mysqli_connectでNo such file or directoryエラー。macのターミナルからは繋がるのになぜかPHPから繋がらないときの対処方法

プロミディア合同会社の斉藤です。

教材作りのため、ローカル環境でPHPを触っていたらデータベースに接続できず、解決までそこそこハマったので記録に残しておきます。

開発環境

Mac Book ProにXAMPPをインストールしたローカル環境。

PHPのみ7.4にアップデートした。

 

エラーの現象

PHPプログラムから下記のコードでデータベース(MariaDB)に接続をかけると失敗した。

ターミナルからは「mysql -u root」でログインできる。

define(“DB_HOST”, “localhost”);
define(“DB_USERNAME”, “root”);
define(“DB_PASSWORD”, “”);
define(“DB_DBNAME”, “custmer_app”);

$database = mysqli_connect(DB_HOST, DB_USERNAME, DB_PASSWORD, DB_DBNAME);

if ($database == false)
{
die(‘Connect Error (‘ . mysqli_connect_errno() . ‘) ‘ . mysqli_connect_error());
}

エラーメッセージ

Warning: mysqli_connect(): (HY000/2002): No such file or directory in /Users/saitousadayoshi/Documents/php/custmer_app/models/common.php on line 7
Connect Error (2002) No such file or directory

 

原因

MariaDBに接続するためのsocket「mysql.sock」が見つからないため、接続できずにいた。

確認方法

phpinfo();を実行し、設定情報を確認。

確かにphp.iniの「mysqli.default_socket」が設定されていない。(未設定だと/tmp/mysql.sockに設定される)

ターミナルからMariaDBにログインし「status」と入力。

socketの場所を確認すると「/Applications/XAMPP/xamppfiles/var/mysql/mysql.sock」になっている。

 

解決方法

php.inimysqli.default_socket/Applications/XAMPP/xamppfiles/var/mysql/mysql.sockを設定する。

php.iniの編集

  1. ターミナルから「vi /usr/local/etc/php/7.4/php.ini」と入力
  2. 「/mysqli.default_socket」と入力し検索
  3. 「i」で編集モード
  4. 「/Applications/XAMPP/xamppfiles/var/mysql/mysql.sock」を設定
  5. エスケープキーで編集モードを抜ける
  6. 「:wq」で保存して終了

 

Apache Web Serverの再起動

XAMPPの画面を開いてApache Web Serverを選択し、Restratボタンを押す。

まとめ

以上で無事PHPからMariaDBに接続できるようになりました。

 

この記事を書いた人

斉藤 貞義

プロミディア合同会社代表。
会社員として約13年間、ソフトウェア開発の経験を積み2015年にPE-BANKに所属して独立。
システムの受託開発をメインとしながら、プログラミングスクール講師、Udemy講師、アフィリエイトサイト(30代のプログラミングスクール選び)の運営も行っている。