[Debian] phpとMySQLの連携

○2017/8/13

●phpでMySQL(MariaDB)にアクセスできるようにする

phpおよび、MariaDBのインストール・設定の過程はこちら。
phpのインストール
MariaDBのインストール

参考サイト:
http://www.phpbook.jp/tutorial/mysql/index1.html

とりあえず、php.iniの、”php_mysql.dll”を有効に。
890行目:extension=php_mysql.dll のコメントアウトを外す。

で、dllファイルはどこにあるのでしょうか?
いろいろ探したけど、ない。

パッケージってインストールされてんのかな?

# aptitude search php
---  いろいろ結果が出てくる  ------

の中に、

p    php7.0_mysql

があった。

この最初の”p”って何?

調べてみたら、
システムにパッケージが導入されたことがない。らしい。
http://quantumfluctuation.blogspot.jp/2013/10/aptitude-search.html

ので、インストールしたらいいのかな?

よくわからんので、本に従ってやってってみようかな。
(phpインストール→DBの設定→Wordpressのインストール)

本でインストールしているphp関係のパッケージのうち、
・php (済)
・php-mbstring (未)
・php-gd (未)
・php-mysql (未)
なので、残りの3つをインストール。

# aptitude install php7.0-mbstring php7.0-gd php7.0-mysql

意地でもインストールしますw
→完了

/etc/php/7.0/mods-available/ 以下に、
mbstring.iniとかが増えてる。

/etc/php/7.0/apache2/conf.d/ 以下にも、
20-mbstring.iniとかが増えてる。

phpinfoでも確認してみようか。

apacheを再起動して、
# service apache2 restart
からの、Windowsのブラウザでphpinfoを開く。
→Additional .ini files parsed に反映されてる。

多分OKだな。

では、

●データベースの準備

phpのテスト用のデータベース、ユーザーを作成・設定

# mysql -u root -p
[rootのパスワードを入力]
[none]> create database phptest; (phpのテスト用のDBを作成)
[none]> grant all privileges on phptest.* to "user"@"localhost" identified by "password";

(localhostの"user"に、データベース"phptest"の全てのテーブルに対する、全ての権限を持たせる。パスワードは"password"。)
参考:https://www.dbonline.jp/mysql/user/index6.html

[none]> flush priviledges;

確認する。

[none]> show grants for "user"@"localhost"\g
 →いろいろ出てくる。

 「GRANT ALL PRIVILEGES ON `phptest`.* TO ‘user’@’localhost’」
 もあるので、多分OK

試しに、設定してないユーザー名も見てみよう。

[none]> show grants for "test"@"localhost"
→エラー

OKですね。

どうでもいいけど、つい成り行きで”user”にしちゃったけど、
ユーザー名を”phpuser”にしときたい。

https://www.dbonline.jp/mysql/user/index3.html

> rename user "user"@"localhost" to "phpuser"@"localhost";
> show grants for "phpuser"@"localhost"\g

→↑と同じ結果:OK

一応、ユーザー一覧の確認も。(←SQLいじりたいだけ)

[none]> select user,host from mysql.user;

→phpuser , localhost も出てくる:OK

以下、↓のサイトに従ってやっていく。
参考サイト:http://www.phpbook.jp/tutorial/mysql/

・テーブルの作成とデータ入力

[none]> use phptest;
[phptest]> create table hanbai(
 -> id int not null primary key,
 -> shouhin_id int,
 -> uriage int);
[phptest]> create table shouhin(
 -> id int not null primary key,
 -> name varchar(20));

テーブル"hanbai":
1列目をint型の項目"id"とし、プライマリキーに設定。
2列目をint型の項目"shouhin_id"とする。
3列目をint型の項目"uriage"とする。

テーブル"shouhin"も同様。

データの入力

[phptest]> insert into shouhin values
 -> (1, "テレビ"),
 -> (2, "DVD"),
 -> (3, "パソコン");
[phptest]> insert into shouhin values
 -> (1, 1, 320000),
 -> (2, 2, 160000),
 -> (3, 3, 180000),
 -> (4, 1, 128000),
 -> (5, 3, 98000),
 -> (6, 2, 140000),
 -> (7, 1, 175000);

確認

[phptest]> show tables;
→"shouhin"と"hanbai"が出てくる。:OK
[phptest]> select * from shouhin;
[phptest]> select * from hanbai;
→入力したデータが出てくる。:OK

で、MySQL終了

[phptest]> exit

●テスト用phpファイルの作成

参考サイトの”test1.php”をコピペ(ユーザー名とパスワードは変える)
して、/var/www/html/php/以下に保存。

Windowsのブラウザから確認。
→このページは動作していません。

apacheを再起動してもう一度。
→このページは動作していません。

MySQLを再起動してもう一度。
→このページは動作していません。

phpで、データベース使えるようになってないな。
何かが足りない。

最初にやった、extension=php_mysql.dll のコメントアウト戻す。
apacheを再起動。MySQLを再起動。
→このページは動作していません。

apacheのエラーログを見てみる。
/var/log/apache2/error.log によると、
「定義されていない関数”mysql_connect()”が呼び出されている」
らしい。

いろいろよくわからんので、
いったんWindows版で試してみよう。

○2017/8/16

Windowsでやってみていろいろわかったので、
もう一度設定してみる。

まず、phpの拡張モジュールがどこにあるか。
php.ini 内の”extension_dir”を検索。

719行目付近
“; Directory in which the loadable extensions (modules) reside” の下

; exteision_dir = "./"

コメントアウトのままだった。
じゃあ、どこかデフォルトで指定されてるはず。

phpinfo で確認すると、
exteision_dir : /usr/lib/php/20151012/
って出てきた。

なので、↑のディレクトリを確認。

いろいろ、”.so”のファイルが入っている。
“mysqli.so”もある。(“mysql.so”はない。)

そしたら、php.ini のextensionでこのファイルを指定してあげればいいのかな?
(Windowsでは”.dll”だけど、Linuxでは”.so”らしい。←php.ini 856行目付近より)

php.ini の890行目付近に以下を追記

extension=mysqli.so

で、Apache再起動。

Windowsで成功したファイルをDebianにコピーして、ブラウザで確認。
→Success… localhost via UNIX socket

よし、OK。

ところで、phpinfoのページで、
他の拡張モジュールの項目も表示されてたんだけど、
もしかして、この作業要らない?
(“exteision_dir”に含まれる”.so”ファイルは元々読み込まれる設定?)

php.ini に、さっき書き足した行をコメントアウト。

; extension=mysqli.so

Apache再起動して、ブラウザで確認。
→Success… localhost via UNIX socket

やっぱり、必要のない作業をしてたみたいw
なので、php.ini は元に戻しておきます。

結局、存在しないモジュールの関数を使ってたっていうだけで、
実際はインストールするだけで使えた。
っていう感じだな。

というわけで、
ひとまず、phpからMySQLに接続できるようになった。