PHP:プロになるためのPHPプログラミング入門 サンプル環境構築 4

公開:2026.05.17(日) 04:51

プロになるためのPHPプログラミング入門 サンプル環境構築

以下書籍に付属するサンプルの実行環境を構築する。
プロになるためのPHPプログラミング入門」(ISBN 978-4-7741-4972-1)

環境は以下記事のものを使用
PHP:プロになるためのPHPプログラミング入門 サンプル環境構築

サーバのバージョン: 8.0.46 - MySQL Community Server - GPL

A.3 MySQLの設定 / A.3.1 データベースと接続ユーザーの作成 (P.320)

1. MySQLコンテナへの接続
MySQLコンテナに接続する。

実行結果:
xxxxxxxx@yyyy:~/docker/php$ docker ps
CONTAINER ID   IMAGE                   COMMAND                  CREATED      STATUS      PORTS                                                    NAMES
3d8258bc2177   php:8.3-apache          "docker-php-entrypoi…"   7 days ago   Up 5 days   0.0.0.0:8080->80/tcp, [::]:8080->80/tcp                  php-php-1
d094e1650051   mysql:8.0               "docker-entrypoint.s…"   7 days ago   Up 5 days   0.0.0.0:3306->3306/tcp, [::]:3306->3306/tcp, 33060/tcp   php-db-1
b60aebf325a6   phpmyadmin/phpmyadmin   "/docker-entrypoint.…"   7 days ago   Up 5 days   0.0.0.0:8081->80/tcp, [::]:8081->80/tcp                  php-phpmyadmin-1
xxxxxxxx@yyyy:~/docker/php$ docker exec -it d094e1650051 /bin/bash
bash-5.1#

2. MySQLログイン
MySQLにrootユーザで接続する。
mysql -u root -p

実行結果:
bash-5.1# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 382
Server version: 8.0.46 MySQL Community Server - GPL

Copyright (c) 2000, 2026, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

3. ppdbデータベースの作成
以下コマンドを実行
create database ppdb CHARACTER set utf8mb4;
実行結果:
mysql> create database ppdb CHARACTER set utf8mb4;
Query OK, 1 row affected (0.03 sec)

4. 管理者ユーザの追加
以下コマンドを実行 → エラー発生
grant all on ppdb.* to 'ppadmin'@'localhost' identified by 'パスワード';
実行結果:
mysql> grant all on ppdb.* to 'ppadmin'@'localhost' identified by 'xxxx';
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'identified by 'xxxx'' at line 1
原因:MySQL 8.0以降では、GRANT コマンドと同時に IDENTIFIED BY を使ってユーザーの作成やパスワードの変更を行うことができなくなった。

対応:
4-1. ユーザーを先に作成する
まず、CREATE USER コマンドでユーザーとパスワードを設定する。
CREATE USER 'ppadmin'@'localhost' IDENTIFIED BY 'パスワード';
実行結果:
mysql> CREATE USER 'ppadmin'@'localhost' IDENTIFIED BY 'xxxx';
Query OK, 0 rows affected (0.02 sec)

4-2. 権限を付与する
次に、GRANT コマンドで権限を設定する。
GRANT ALL PRIVILEGES ON ppdb.* TO 'ppadmin'@'localhost';
実行結果:
mysql> CREATE USER 'ppadmin'@'localhost' IDENTIFIED BY 'xxxx';
Query OK, 0 rows affected (0.02 sec)

4-3. 設定を反映する
念のため、変更を確実に反映させるために以下のコマンドを実行しておく。
FLUSH PRIVILEGES;
実行結果:
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)

5. 一般ユーザの追加
一般ユーザーもユーザ作成と権限付与を分けて実行する。
CREATE USER 'ppguest'@'localhost' identified by 'パスワード';
実行結果:
mysql> CREATE USER 'ppguest'@'localhost' identified by 'xxxx';
Query OK, 0 rows affected (0.01 sec)

GRANT SELECT ON ppdb.* to 'ppguest'@'localhost';
実行結果:
mysql> GRANT SELECT ON ppdb.* to 'ppguest'@'localhost';
Query OK, 0 rows affected, 1 warning (0.00 sec)

FLUSH PRIVILEGES;
実行結果:
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)

続く・・


0 件のコメント:

その他の記事