0.概要
デザイナーをやっていると、静的なサイトは作れるものの、
動的なサイトを作る時にはエンジニアに頼むことが多く、
自身で完結できないことが歯痒い時があります(実体験)。
そこで今回は、
データベース(今回はMySQL)に保存したデータを、
条件によって動的に出し分け(PHPで、SQLのクエリを書く)、
サイトに表示する方法を記載いたします。
1.はじめに(データベースの準備)
まず最初に、データベース自体にデータを入れます。
借りてるレンタルサーバーのコントロールパネルから、
phpMyAdminにログインするか、
データベースをデータベース管理ツールと連携させましょう。
オススメの無料データベース管理ツールは下記の2つです。
名前 | 特徴 | 入手先URL |
---|---|---|
DBeaver | クラシカルなUIだが多機能。ER図というDBの繋がりを表示してくれる機能がある。※今回はこれを実例に進めて参ります。 | https://dbeaver.io/ |
Metabase | ビジュアライズが充実している。クエリを知らなくともGUI上で色々できるのでデザイナーにも扱いやすい。 | https://www.metabase.com/start/oss/jar |
※導入に関しては他の方が書かれた下記の記事を参考にして下さい。
・ データベースツール DBeaver のインストール(Windows 上)
https://www.kkaneko.jp/tools/win/dbeaver.html
・MetabaseをWindowsにインストールする
https://qiita.com/n-i-e/items/b721687903055659ee2d
上記いずれかのデータベースにて入れたら、
まずはDB上にテーブル・カラム(項目名)を設定するために、
UI上にてテーブルの設定、カラムの設定、レコードの追加を行って下さい。
ここではDBeaverの画面を参考に進めて参ります。
・テーブルの追加
ツリーでDBをクリックし、ウインドウで開いたら[テーブル]を右クリックし、
[新しく作る 表]をクリックすると設定画面に入り、作成されます。
・カラムの追加
先程作成されたテーブルを開き、[列]にて、右クリックし、
[新しく作る カラム]をクリックすると設定画面に入り、作成されます。
・レコードの追加
最後に、今設定されたテーブル・カラムにレコードを追加するため、
SQL文のエディタを開きます。
DBeaverであれば、メニューの[SQLエディタ]から開けます。
開けたらDB上に新規レコードを追加するクエリを記述しましょう。
INSERT INTO [DB名].[テーブル名]
([カラム名1], [カラム名2])
VALUES('[カラム名1の値]', '[カラム名2の値]');
※[]は削除し、中身をご自身のDBに合わせた文字に変えて下さい。
終了したらテーブルの[データ]にてちゃんと追加されているか確認しましょう。
私の場合は2つのレコードを下記のように入れ、問題ないことを確認しました。
2.PHP側でのMySQLとの連携
データベースの準備が出来たら、
PHPの読み込むファイル(例えばindex.phpなど)に、
MySQLへ接続するための、情報を記載いたします。
<?php
// MySQLの接続情報をセット
$db = 'mysql:host=[データベースのホスト名];dbname=[データベース名]';
$user = '[ユーザー名]';
$pass = '[パスワード]';
//接続のテスト
try {
$pdo = new PDO($db, $user, $password);
echo "接続に成功しました";
} catch (PDOException $e) {
echo "接続に失敗しました";
exit();
}
//次のステップの時にここにSQLを書く
?>
こちらを読み込んでみて「接続に成功しました」と出れば成功です。
接続に失敗しましたと表示された場合は、接続設定を見直してみて下さい。
豆知識・・・PDOはPHP Data Objectが正式名称です。
3.実際にクエリを書いて反映してみる
先程のphpファイルの、
//次のステップの時にここにSQLを書く
を書き換えます。
が、SQLを書く際はprepare文とexecute文で前処理をする必要があり、
その記述も合わせて書きましょう。
// SQLを書く(''の中は任意のクエリを記述)
$sql = 'SELECT [表示項目] FROM [データベース名].[テーブル名] WHERE [条件]';
// prepare文で上記のSQLを定義し、execute文で定義したSQLを実行
$prepare = $pdo->prepare($sql);
$prepare->execute();
// 結果を出力
foreach($prepare->fetchAll() as $result){
// echo $result['カラム名'];にて出力できる
}
私の場合、クエリにてshop_idがtest1のものに絞り、
2つのカラム(shop_nameとshop_id)をh2要素として表示させたため、
と表示されました。
4.最後に
今回はクエリをこちら側で書きましたが、
サイト閲覧者に入力してもらうことによって、
ユーザー毎にリクエストした結果を表示することも可能です。
今後、その方法も記事にして行きます。