七十の独習
オブジェクト指向 Work-2-1
【ワークの目標】
MariaDB(MySQL)とPHPを使って、WEB上で動く仮想の販売管理システムを作ること。もちろん完成すればわが農園でも応用できる。
前回準備したデータベースにアクセスして、PHPでデータベースの操作をしてみよう。
データベースの操作にはCreate(生成)、Read(読み取り)、Update(更新)、Delete(削除)があり、CRUD(クラッド)と呼ばれている。
今回は、この中で、一番簡単な「読み取り」から学習して行こう。

店舗テーブル(tenpo)
店舗コード | 店舗名 | |
カラム名 | tenpo_code | tenpo_name |
属性 | varchar | varchar |
長さ | 4 | 20 |
インデックス | UNIQUE | UNIQUE |

経験年数ばかり長い私はこれまで、mysql_* 系関数を利用していが、PHP 5.5で非推奨になり、PHP 7.0で削除されてしまった。
そこで、よく理解しないままにmysqliクラスを使うようになったのだが、PDOクラスの方が安全性や他のデータベースとの互換性も高いようで、PDOを推奨する参考書が多いので、PDOを使うようにした。
このワークでは、PDOを使うことをきっかけに、オブジェクト指向をきちんと学ぼうと思った次第で取り組んでいる。
【PDOクラスでデータを取得(SELECT)】sample2-1.php
- <?php
- try {
- // DBへ接続
- $dbh = new PDO("mysql:host=localhost; dbname=sms; charset=utf8", 'root', 'password');
- // SQL作成
- $sql = "SELECT * FROM tenpo where tenpo_code='0002'";
- // SQL実行
- $res = $dbh->query($sql);
- // 取得したデータを出力
- foreach( $res as $value ) {
- echo "$value[tenpo_code]:$value[tenpo_name]<br>";
- }
- }
- //エラー処理
- catch(PDOException $e) {
- echo $e->getMessage();
- die();
- }
- // 接続を閉じる
- $dbh = null;
- ?>
【注意】
4行目の
$dbh = new PDO(“mysql:host=localhost; dbname=sms; charset=utf8″, ‘root’, ”);
は、セキュリティ上の理由でソース内に記述すべきではない。
PHPのソースは外部からは基本的には見えないが、何らかの原因で見られてしまう可能性も否定できない。外部から見られたくない部分はhtdocsフォルダ外に記述し、sample1-3.phpで記述した方法で読み込むようにする。
もちろん、ログイン名とパスワードも適正に設定する。
【実行結果】
0002:飯野支店
4行目 ”mysql:host=localhost; dbname=sms; charset=utf8″
データベースに接続のための情報文字列で、最初のmysqlはDSN接頭辞と呼ばれるもの。使用するデータベースの種類によって変える。
DSN接頭語:host=ホスト名;dbname=データベース名;charset=文字コード
‘root’, ‘password’ はログイン名とパスワード。
7行目 $sql = “SELECT * FROM tenpo where tenpo_code=’0002′”;
SQL文。tenpoテーブルから、tenpo_codeカラムの値が0002であるデータを選択する。
このサンプルではデータは1件だけであるが、複数の該当がある場合は、それらをすべて選択する。
10行目 $res = $dbh->query($sql);
SQL文を実行し、インスタンスを格納する。
13,14,15行目
foreach( $res as $value ) {
echo “$value[tenpo_code]:$value[tenpo_name]
“;
}
サンプルでは結果は1件のみのヒットだったが、複数ある場合はすべてを表示する。
18行目からのエラー処理は必ず記述する。
25行目 $dbh = null;
データベースへの接続を切断。
意外と簡単な印象だ。
今回は、queryメソッドを使った(10行目)が、prepareメソッドと言うのもあり、次回はprepareメソッドを使ってみる。