phpMyadminを使って商品一覧を表示してみましょう。
コントロールパネルを起動し、MySQLのAdminをクリックします。
データベースタグから左のshopをクリックします
探したい商品一覧はproductに格納されているので、productをクリックします。
すると商品一覧が表示されます。
SQL(データベースを利用するための言語)を使ってデータを取得して、ブラウザに表示させる
SQLタグをクリックし、下記のように入力します。そして下にスクロールして実行をクリック。
データを取得できました。
SELECT*FROM product; | selectを使って指定したテーブルの指定した列を取得します。 *は全ての列を指定します。指定した列だけを取得したいときには、idやnameで列名を指定します。複数取得するときはid,nameとカンマで区切ります。 |
PHPからデータベースに接続してみる
PHPからデータベースに接続するにはPDOと呼ばれる機能を使います。
PDOは、PHPとデータベースとの間の接続機能をもたせます。PHPでは関連する変数や関数をまとめて定義するために、「クラス」という枠組みを用意してます。PDOはクラスの一種で、データベースを操作するための変数や関数が、まとめられて定義されています。
クラスの中の変数を「プロパティ」、関数を「メソッド」と呼びます。PDOのクラスを使用するにはインスタンスを作る必要があります。インスタンスとは、クラスで定義された機能を、実際に使用できるようにコンピューターのメモリ上に配置することです。クラスを使うためにはインスタンスを作る必要があるということです。
今回はテストとしてデータベース(test_db)とテーブル(product)と3つのデータを用意しました。
php_to_db.php
<?php require ‘header.php’; ?> <?php $pdo = new PDO(‘mysql:host=localhost;dbname=test_db; charset=utf8′, ‘staff’,’password’); ?> <?php require ‘footer.php’; ?> | new PDO();でインスタンスを作ります。 mysqlはMYSQLに接続すること。 「第一引数」 host=localhostはMySQLがlocalhostに存在するとのこと。 dbname=test_dbはデータベースです。 charset=utf8は、文字コードを表します。 「第二引数」 staffはユーザー名です。 「第三引数」 パスワードです。ユーザーを作成する際に指定したパスワードを記述します。ここでは便宜的にpasswordとしてます。 |
PHPで商品一覧を表示する
php_to_db.php
赤字追記
<?php require ‘header.php’; ?> <?php $pdo = new PDO(‘mysql:host=localhost;dbname=test_db; charset=utf8′, ‘staff’,’password’); foreach ($pdo->query(‘select * from product’) as $row){ echo ‘<p>’; echo $row[‘id’], ‘:’; echo $row[‘name’], ‘:’; echo $row[‘price’]; echo ‘</p>’; } ?> <?php require ‘footer.php’; ?> | 複数行のデータを1行ずつ処理するのに適するforeachを使います。 変数$pdoを指定し、メソッドを呼び出す[ ->]を使います。 queryメソッドは、引数に指定したSQL文をデータベースに対して実行します。 その実行結果をas $rowとして変数rowに代入します。 |
foreach ($pdo->query(‘select * from product’) as $row){ echo “<p>$row[id]:$row[name]:$row[price]</p>”; } | ダブルクオート(”)で囲めばシンプルに記述することもできます。 |
HTMLでの表を使って見やすく表示する
php_to_db.php
赤字修正、追記
<?php require ‘header.php’; ?> <table><tr><th>商品番号</th><th>商品名</th><th>価格</th></tr> <?php $pdo = new PDO(‘mysql:host=localhost;dbname=test_db; charset=utf8′, ‘staff’,’password’); foreach ($pdo->query(‘select * from product’) as $row){ echo ‘<tr>’; echo ‘<td>’, $row[‘id’], ‘</td>’; echo ‘<td>’, $row[‘name’], ‘</td>’; echo ‘<td>’, $row[‘price’], ‘</td>’; echo ‘</tr>’; echo “\n”; } ?> </table> <?php require ‘footer.php’; ?> | 先頭の<table>タグと見出しの部分、そして末尾の</table>タグはPHPタグの外側に記述しています。 そのため、PHPタグの外側に記述した内容は、そのまま出力されます。 |
より安全にデータを表示する工夫
データベースから取得したデータを出力する際に、HTMLにおいて特別な働きを持つ文字が含まれていると、ブラウザ上の表示が乱れたりします。それらを防ぐために次のように変更します。
<?php require ‘header.php’; ?> <table><tr><th>商品番号</th><th>商品名</th><th>価格</th></tr> <?php $pdo = new PDO(‘mysql:host=localhost;dbname=test_db; charset=utf8′, ‘staff’,’password’); foreach ($pdo->query(‘select * from product’) as $row){ echo ‘<tr>’; echo ‘<td>’, htmlspecialchars($row[‘id’]), ‘</td>’; echo ‘<td>’, htmlspecialchars($row[‘name’]), ‘</td>’; echo ‘<td>’, htmlspecialchars($row[‘price’]), ‘</td>’; echo ‘</tr>’; echo “\n”; } ?> </table> <?php require ‘footer.php’; ?> | 前項の$row[‘name’]ではデータに「<」「>」のようなHTMLのタグなどが含まれているときに、ブラウザ表示が乱れる場合があります。 それを防ぐため htmlspecialchars関数を使い、データを加工してから表示します。 |