Web Server MySQL

作ってみよう!PHPとMySQLでデータベース内容をブラウザに表示

PHPとMySQLを組み合わることで、様々なWebシステムを構築することが出来ます。ログインシステムもPHPとMySQLで実現出来る代表的なシステムです。Webデザインの学習を進めている中で、PHPとMySQLそれぞれの学習を進めていくことも勿論重要ですが、実際に何かシステム構築を行う場合はこれらを組み合わせることが必要です。しかしながら、PHPとMySQLについてそれぞれ知識を増やしていっても、組み合わせて使う場合には少し難易度が上がります。

この記事では、PHP+MySQLでデータベース内容をブラウザに表示するという、本当にシンプルなものを作ってみます。シンプルですが、PHPとMySQLを組み合わせる際の最初のステップとして参考になると思いますので、是非読んでみて下さい。

事前準備 MySQLユーザ作成とデータベース作成

Raspberry Piをサーバー機とします。下の記事で、Raspberry PiでWebサーバーを構築し、PHPのインストール、MySQLサーバを立ち上げる方法をまとめています。

サーバー環境が準備出来たら、次の事前準備としてMySQLのユーザ作成とデータベース作成を行っていきます。

下の記事でRaspberry Piの種類と購入先の情報をまとめています。ご購入を検討されてはいかがでしょうか。

MySQLユーザの作成

PHPでMySQLにアクセスする際のユーザを作成しておきます。MySQLにルートユーザでログインし、ユーザ名を仮にuserAとしてユーザを作成します。PHPのプログラム上、このユーザ名とパスワードの記載が必要になります。パスワードは、この記事では'abcd'としました。

MySQLコマンド

create user userA identified by 'abcd';

データベースの作成とアクセス権の設定

PHPでアクセスするデータベースをtestDBという名前で作成します。その後、先程作成したuserAにtestDBのアクセス権を設定しておきます。アクセス権を設定しておかないと、PHPからuserAでこのデータベースにアクセスすることが出来ません。このコマンドもルート権限が必要なので、ルートユーザでログインして実行して下さい。

MySQLコマンド

create database testDB;

grant all on testDB.* to userA;

テーブルの作成

最後に、実際のテーブルを準備しておきます。userAでMySQLにログインし、データベースtestDBを選択します。そして、次のテーブルを追加します。

IDNameAGE
1Sato19
2Ito20
3Inoue25
4Saito30

コマンド例を紹介します。

MySQLコマンド

use testDB;

create table testtable(ID int, Name char(255), AGE int);

insert into testtable(ID,Name,AGE) values(1,'Sato',19),(2,'Ito',20),(3,'Inoue',25),(4,'Saito',30);

これでMySQL側の事前準備は完了です。次にPHPプログラムを準備します。

PHPプログラムの準備とWebサーバのドキュメントルートへコピー

ではPHPプログラムを作成していきましょう。PHPプログラムの作成後、PHPを実行するためにWebサーバのドキュメントルートにコピーしておく必要があります。

PHPプログラムの作成

次のプログラムを参考に、PHPプログラムを作成して下さい。データベースの接続や、テーブルからのレコードの取得は、事前に準備したMySQLのデータベース名、ユーザ名、カラム名と一致しておく必要があります。ファイル名は、PHPMYSQLtest.phpとします。

<html>
<head>
<title>PHPMYSQLtest</title>
</head>
<body>

<?php

$link = new mysqli('localhost','userA','abcd','testDB');
// 接続状況をチェックします
if (mysqli_connect_errno()) {
    die("データベースに接続できません:" . mysqli_connect_error() . "\n");
}
echo "データベースの接続に成功しました。\n";

$db_selected = $link->select_db('testDB');
if (!$db_selected){
    die('データベース選択失敗です。'.mysqli_error());
}
print('<p>データベース選択に成功しました。</p>');

 mysqli_set_charset($link,'utf8');

$result = $link->query('SELECT id,Name,AGE FROM testtable');
if (!$result) {
    die('クエリーが失敗しました。'.mysqli_error());
}

 while ($row = mysqli_fetch_assoc($result)) {
     print('<p>');
     print('id='.$row['id']);
     printf("\n");
     print('username='.$row['Name']);
     printf("\n");
     print('age='.$row['AGE']);
     printf("\n");
     print('</p>');
 }
// 接続を閉じます
mysqli_close($link);
?>
</body>
</html>

PHPプログラムをドキュメントルートへコピー

PHPプログラムをwebサーバのドキュメントルートに格納しましょう。webサーバのLinuxディストリビューションの種類によってディレクトリに違いがありますが、Raspberry PiをRaspbianで動かしているのであれば、ドキュメントルートは/var/www/html になります。

これで全ての準備が出来ました。早速、クライアント機からPHPを実行してみましょう。

検証 クライント機からブラウザでPHPを起動

WebサーバであるRaspberry Piと同一LAN内にあるクライアント端末でブラウザを立ち上げます。アドレスに ”Raspberry PiのIPアドレス/作成したPHPプログラム名.phpを入力して実行して下さい。この記事では、Raspberry PiのIPアドレスが192.168.1.118になっており、PHPプログラム名がPHPMYSQLtest.phpなので、”192.168.1.118/PHPMYSQLtest.php"と入力します。

次のような表示結果が得られれば成功です。上にも記載していますが、PHPのプログラムで指定するデータベース名、ユーザ名、カラム名等が、事前に準備したMySQLのデータベース名、ユーザ名、カラム名と一致していないとエラーになります。期待どおりの結果が得られない場合はまずはそこを確認してみて下さい。

PHP+MySQL test result

まとめ

PHPとMySQLを使って、クライアント機のブラウザ経由でテーブルの内容を表示させました。これだけでは意味のあるものではないですが、バックエンドの学習の成果として、PHPとMySQLを組み合わせる最初の取り組みとしては良い教材ではないでしょうか。これを発展させて、ログインシステム等も紹介していきたいと思います。

最後までお読み頂きありがとうございます。

-Web Server, MySQL