概要
過去3回に渡り「Linux(CentOS7)でWebサーバーを構築する」シリーズを綴って参りましたが、今回が導入編の最終回となります。(多分)
-導入編Final-では、
- php-mysqliの導入
- 実働テスト
- テスト用データベース及びユーザーの作成
- テスト用テーブルの作成
- テストデータの登録
- サンプルページ作成
- 動作確認
- 注意点
について綴ります。
今までの「Linux(CentOS7)でWebサーバーを構築する」シリーズ
手順
php-mysqliの導入
phpからMySQLへのアクセスが簡単にできるように、php-mysqliを導入するよ!
1. 導入
# yum -y install php-mysqli
とっても簡単ね!
2. httpdの再起動
php-mysqliのインストールが終わったら有効化するためにhttpdを再起動してね。
# systemctl restart httpd.service
実働テスト
1. テスト用データベース及びユーザーの作成
サンプルコードを実行するためのデータベースとそれを使用するためのユーザーを作成するよ。
MySQLにログイン
# mysql -u root -p
テスト用のデータベースを作成
MariaDB [(none)]> create database testdb;
※[testdb]は任意のデータベース名を入力
testdbを操作するためのユーザーを作成
MariaDB [(none)]> grant all on testdb.* to testuser@localhost identified by 'password';
※[testuser]は任意のユーザー名を入力
※[password]は任意のパスワードを入力
ここまでできたら一旦MySQLを終了。
MariaDB [(none)]> \q
さっき作ったユーザーでログインし直してみよう!
# mysql -u testuser -p
ログインできたかな?
useでさっき作ったデータベースを選択してね!
MariaDB [(none)]> use testdb
(none)の表示が(testdb)に切り替わったらOK!
MariaDB [(testdb)]>
2. テスト用テーブルの作成
さっき作ったデータベースに新しいテーブルを作成するよ!
テーブルっていうのは、表のこと。
名簿とか帳簿をイメージしてもらえば。
+-------------+-----------------------------+--------------+
| number | name | constellatio |
+-------------+-----------------------------+--------------+
| 1 | Hoshimiya | Pisces |
+-------------+-----------------------------+--------------+
| 2 | Kiriya | Aquarius |
+-------------+-----------------------------+--------------+
| 3 | Shibuki | Leo |
こんなん。
早速作ってみるよ!
MariaDB [(testdb)]> create table testtable (number int(4), name varchar(32), constellatio varchar(32));
create table
はテーブルを作るための命令、
[testtable]には任意のテーブル名を。
後ろに続くのが、テーブルにどんなデータを格納するかを定義する文だよ。
number int(4)
は4桁の数値を入れるnumberという箱を用意、
name varchar(32)
は最大32文字の文字列を入れるnameという箱を用意、
constellatio varchar(32)
は最大32文字の文字列を入れるconstellatioという箱を用意する文。
きちんと作られたか確認してみてね。 `MariaDB [(testdb)]> show columns from testtable;`
こんな結果が出たら成功!
+-----------------------------------------------------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+-------+
| number | int(4) | YES | | NULL | |
+--------------+-------------+------+-----+---------+-------+
| name | varchar(32) | YES | | NULL | |
+--------------+-------------+------+-----+---------+-------+
| constellatio | varchar(32) | YES | | NULL | |
+--------------+-------------+------+-----+---------+-------+
3. テストデータの登録
せっかくテーブルを作ったので、早速データを登録してみよう!
MariaDB [(testdb)]> insert into testtable (number, name, constellatio) values (1, "Hoshimiya", "Pisces");
insert into
はテーブルにデータを挿入する命令、
[testtable]には任意のテーブル名を指定してね。
続く (number, name, constellatio)
と (1, "Hoshimiya", "Pisces")
は対の関係になっているよ!
number
は 1
、
name
は Hoshimiya
、
constellatio
は Pisces
でデータを登録する、という文になるよ!
他のレコードも追加しちゃいます。
MariaDB [(testdb)]> insert into testtable (number, name, constellatio) values (2, "Kiriya", "Aquarius");
MariaDB [(testdb)]> insert into testtable (number, name, constellatio) values (3, "Shibuki", "Len");
テーブルの中身を確認してみよう! `MariaDB [(testdb)]> select * from testdb;`
ちゃんと登録されていたかな?
+-------------+-----------------------------+--------------+
| number | name | constellatio |
+-------------+-----------------------------+--------------+
| 1 | Hoshimiya | Pisces |
+-------------+-----------------------------+--------------+
| 2 | Kiriya | Aquarius |
+-------------+-----------------------------+--------------+
| 3 | Shibuki | Leo |
+-------------+-----------------------------+--------------+
4. サンプルページ作成
/var/www/html
に下記のサンプルコードを作成してね!
<html>
<head>
<title>Sample</title>
</head>
<body>
TEST PHP.<br>
<hr>
<?php
if( !isset( $_GET['number'] ) )
{
echo '[Error]require param.<br>';
exit;
}
$mysqli = new mysqli( '127.0.0.1', 'testuser', 'password', 'testdb' );
if( $mysqli->connect_errno )
{
echo '[Error]' . $mysqli->connect_error . '<br>';
exit;
}
$res = $mysqli->query( 'select name,constellatio from testtable where number=' . $_GET['number'] . ';' );
if( $res )
{
echo '[Success!]<br>';
while( $row = $res->fetch_assoc() )
{
echo $row['name'] . ' (' . $row['constellatio'] . ')<br>';
}
}
else
{
echo '[Error]failure...<br>';
}
$mysqli->close();
?>
</body>
</html>
[testuser] には任意のMySQLユーザー名を、
[password] には↑のユーザーのパスワードを、
[testdb] には任意のデータベース名を、
[testtable] には任意のテーブル名を指定してね!
解説
$mysqli = new mysqli( '127.0.0.1', 'testuser', 'password', 'testdb' );
new mysqli
でMySQLへの接続を試みているよ!
testuser
は上で作ったMySQLユーザー名を、
password
は上で指定したパスワードを、
testdb
には上で作ったデータベース名を指定してね!
$res = $mysqli->query( 'select name,constellatio from testtable where number=' . $_GET['number'] . ';' );
$mysqli->query
でMySQLにクエリを送るよ!
引数にはSQL文を入力してね!
select name,constellatio
はnameとconstellatioを要求、
from testtable
testtableから、
where number=1
numberが1のレコードを、の意。
全部繋げると「testtableからnumberが1になっているレコードのnameとconstellatioを取得」という意味になるよ。
while( $row = $res->fetch_assoc() )
$res->fetch_assoc()
は$mysqli->queryの結果から一つのレコードを取得する文だよ!
echo $row['name'] . ' (' . $row['constellatio'] . ')<br>';
$row['パラメタ名']
でfetch_assoc
の結果にアクセスできるよ!
5. 動作確認
いよいよ実働テスト!
Apache, php, MySQLはちゃんと動いてくれるかな??
`http://???.???.???.???/sample.php?number=1` ブラウザにアドレスとパラメタを与えて、サンプルページにアクセスしてみてね!
[Success!]
Hoshimiya (Pisces)
こんな感じに表示されたかな?
`http://???.???.???.???/sample.php?number=2` 今度はnumberを2にしてみると…?
[Success!]
Kiriya (Aquarius)
`http://???.???.???.???/sample.php` パラメタがないと…?
[Error]require param.
`http://???.???.???.???/sample.php?number=100` 登録されていないnumberを指定すると…?
[Success!]
成功はするけど何も表示されないよ。
動いたかな?
注意点
今回のサンプルはエラーチェックとか色々省いた簡易コードです。
実運用では、エラーチェックや例外処理、あとSQLインジェクション等には十分気をつけてね!