🍿

生PHPでmysqlを使おうとした

2022/08/18に公開

生のphpでアプリケーションを自作していると、基本的な設定の段階から知らないことが多くて時間を取られてしまった。頻繁に打つコマンドは整理しておかないと同じ苦労をしそうなので記録しておく。

mysqlのインストール

$ brew install mysql

インストール後、php.iniからmysqlの行でセミコロンを削除する

起動

$ brew services start mysql@5.7

接続

CLIでのmysqlへの接続。-uはユーザ名

$ sudo mysql -u root -p

-uはユーザー名、-pはパスワードを指定する時のオプション。

設定ファイル httpd.conf はApplications/MAMP/配下にある。これは先代macで学習していた頃の名残だと思うが記憶にない。ネットの記事の人は /usr/local/etc/httpd/などに保管しているので、修正したほうがいいのかも?ただここは今のところ問題なさそうなので、後回しにする。

エラー

sqlの準備ができたのでphpを実行。データベースに接続する段階でエラー発生。

try {
    $pdo = new PDO('mysql:host=localhost;port=8888;dbname=mvc;charset=utf8','root','パスワード');
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}
Connection failed: SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: YES)(base)

データベースが絡むコードなので設定ファイルやmysqlの環境構築で何か間違えているのでは?と考え、手元にあった「独習PHP」の助言をもとにApacheの再起動を試してみることにした。

Apacheの起動・再起動

$ sudo apachectl start

これでhttpdのプロセスが起動する。(ps aux|grep httpd でプロセス確認したがユーザ名が本名なので割愛)。しかしphpに戻り実行すると同じエラーが返る。

sudo httpd -k start でもApacheを起動できるらしい。しかし

$ sudo httpd -k start
Password:
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using MacBook-Pro.local. Set the 'ServerName' directive globally to suppress this message
httpd (pid 70664) already running

こちらは何故かエラー。 httpd.conf でserverNameが設定されていない時に起こるエラーらしいが、確認したところ

#
# ServerName gives the name and port that the server uses to identify itself.
# This can often be determined automatically, but we recommend you specify
# it explicitly to prevent problems during startup.
#
# If your host doesn't have a registered DNS name, enter its IP address here.
#
ServerName lhttpd -vocalhost:8888

しっかり書かれている。おそらく去年MAMPを使っていた時に編集していたもの。とりあえずapachectlのほうで動くので後回しに。

結論

PDOのコンストラクタに渡すパスワードが間違っていただけだった。phpmyadminでrootユーザに設定していたパスワードを誤って書いていた。が、エラー解消のために調べた無関係な情報がもったいないので整理しておく。

ところで、phpmyadminにあるユーザ、DBの情報がコマンドラインでsqlを操作している時の情報と被っていない理由が気になる。

Discussion