見出し画像

今度はMariaDBとPHPの連携に挑戦


どうも、じぇいかわさきです。

Pythonは一休みして、今度はIoTをやろうとした時に必要になるデータベースとWeb連携について少々考えてみた。

Pythonはどちらかと言うと、各種センサーをラズパイに接続して、そこからのデータを取得し、その結果をデータベースに蓄積していく作業をさせようとしている。

センサーが手元にないので、入手後にそちらはやるとして、蓄積したデータをWebから呼び出す方法に挑戦してみた。

簡単なようで、かなり手こずり、結局半日以上は使ってしまった。個人的には充実した時間が過ごせたと思っている。

それでは、今回も備忘録的にやったことをまとめていこう。


現状の環境

現状の環境は手元に有るものを活用して構築している。今までのように、mac内に疑似環境を作ってやっても良かったのだが、外に持ち出すことを考慮して余っていたラズパイ3B+を使った。

従って、今回からすべてラズパイ3B+で開発もやっている。開発って言うとかっこいいが、たんなるソースをしこしこと書いているだけだ。

実際に必要なのは、MariaDBとPHP及び、PHPからMariaDBを操作するPDOです。

後は、データベスを作成したりするのに便利なようにphpmyadminをインスト−ルしておく。

今回は、MariaDBは既にインストールしてあったが、それ以外がインストールしていなかったので、何時も通りにsudo apt-get install で各々をインストールした。

このインストールさえ完了すれば、開発準備は整った事になります。

インストールしたもの
①PHP
②PDO Driver
③phpmyadmin



そもそもどこから始めれば良いんだ?

さて、なにかやろうとしてもド素人なので、全てがゼロからのスタートになる。

ず〜と昔、記憶の片隅にSQLServerとDelphiで同じようなことをしたことが有るが、20年以上前の話なので、ほとんど記憶にないに等しい。

という事で、まずはPHPを調べて、どうすればデータベースに接続できるのかを考えた。

記憶の片隅では、直接PHPの記述でできたような気がしたのだが、現状はPDOを用いてデータベースに接続するのが主流のようです。

PDOとはPHP Data Objectsの略称で、PHPからのデータベースアクセスを抽象的にしてくれるらしいのですが、この抽象的というのがいまいち理解できませんでした。

ただ、PDOを使用してデータベースに接続するようにしておくと、MariaDBから他のデータベースに変更しても、そのまま接続ができるようなのです。

多分、このデータベースを選ばないというところが抽象的という部分なんでしょうね。

とは言え、このPDOに部分はドットインストールで丁度勉強している部分なので、もう一度復習をしながら進めれば、なんとか理解できるかもしれない。

ネットで調べながらも、カット&トライを繰り返しました。


用語が難しくて頭が???

PHPのクラスが・・・インスタンスが・・・さっぱりこの意味が分からない。

意味がわからなくてはコードを書けないので、とりあえず調べてみた。

クラスとは クラスとは簡単に説明すると、プログラムの処理をまとめたオブジェクトのことで、あらゆるプログラミング言語でクラスは使用される。

クラスの中では主に、プロパティ(変数や定数)やメソッド(関数)の定義を記述します。

インスタンスは、クラスで定義したプロパティを受け継いでいるもの(すなわちIDとPWという変数が宣言された状態)を指します。

ん〜、何だか分かったような分からないような、スッキリってなふうには行きませんね。このへんが、従来プログラミングを断念させる根源だったのかもしれません。

今回は、紳士的にぶち当たって行くようにします。


とりあえずMariaDBに接続するぞ

まずはPDOインスタンスを生成して、MariaDBに接続する事を考えます。

<?php
try {
	$dsn = 'mysql:dbname=test;host=localhost';
	$user = 'pi';
	$password = '***********';
	$dbh = new PDO($dsn, $user, $password);
	echo "接続成功\n";
}

これで、PDOが$dbhというインスタンスを生成します。問題なければ、接続成功良いう文字が返ってくるはずです。

これを、Webではなくターミナルで実行して確認します。

>php test.php

できてしまえば、非常に簡単なコードでしかないですが、ここまでたどり着くには非常に時間がかかった。


次はこいつをHTMLに埋め込んで見る

それでは、HTMLのファイルに埋め込み、ファイルを指定したらWebページでみれるかを確認んします。

HTMLのコードはこれです。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
<title>MariaDBへの接続テスト</title>
</head>
<body>
<h1>ロト6当選番号データベース</h1>
<p></p>
<h2>PHPによるMariaDB接続とSELECTテスト</h2>
<?php
$dsn = 'mysql:dbname=test;host=localhost';
$user = 'pi';
$password = '**********';
try{
   $dbh = new PDO($dsn, $user, $password);
   $sql = 'select * from result';
   foreach ($dbh->query($sql) as $row) {
       print($row['kaisai'].', ');
       print($row['date'].', ');
       print($row['No1'].', ');
       print($row['No2'].', ');
       print($row['No3'].', ');
       print($row['No4'].', ');
       print($row['No5'].', ');
       print($row['No6'].', ');
       print($row['bonus']);
       print('<br />');
   }
}catch (PDOException $e){
   print('Error:'.$e->getMessage());
   die();
}
$dbh = null;
?>
</body>
</html> 

とりあえず、何時も使用しているロト6のデータが、たくさん入っているので活用しやすいから、これをベースにテーブルデータをすべて取り出す記述を、まずは考えました。

192.168.10.15/test.php

テストページにアクセスしてみると、こんな感じで表示されたので、MariaDBとの接続はうまくいき、テーブル内容も無事表示できました。

画像1


今は、データを呼び出してカンマ区切りで表示してあるだけですので、次は見た目を綺麗にするようにテーブル表示にできるように挑戦してみたいと思います。

少しずつですが、できていくと楽しいですね。次はこうしたい、次は表示のここを直したいなど、夢は広がります。


じぇいかわさきです。生産技術者として35年、今まで培った経験とスキルを元に、ものづくりに関わる世の出来事に対して思ったことをホンネで書いてます。ノウハウやアイデアもありますよ。 また写真も全力で撮っています、気に入った写真があればサポートや感想をぜひお寄せください。