WEBシステムの開発プラットフォーム LIB PHP Framework! 高速でセキュアなフルスクラッチ開発を今すぐ開始できます。

How to use

Chapter4. phpMyAdminによるテーブル作成

HTMLフォームに入力されたデータはデータベースに保存し必要に応じて出力します。
本章では、phpMyAdminを使用したMySQLデータベースの操作方法とデータテーブルの定義方法を解説しています。

1. phpMyAdminにアクセス

phpMyAdminは、XServerにインストールされているMySQLデータベースの管理ツールです。
XServerのサーバーパネルにアクセスし、データベース欄にある phpmyadmin(バージョン) をクリックします。
バージョンは、サーバー契約とセットアップ手順を実行した時期により異なりますので、「MySQL設定」で確認してください。
phpMyAdminのアクセスにはBasic認証が必要です。 サーバー契約とセットアップ手順で設定したMySQLユーザー名とパスワードを入力してください。

2. テーブル作成

画面左のテーブルリスト上部にある「New」をクリックします。

テーブルリストにあらかじめ作成されているテーブルは、LIB PHP Frameworkの動作に必要なものですので変更しないようにしてください。
LIB PHP Frameworkが使用するテーブルはリファレンスに記載されています。

3. テーブル定義とデータ型

テーブル名

テーブル名には一般的に、プレフィックスとしてマスターデータを表す「m_」やトランザクションデータを表す「t_」を付加しますが、これはさほど重要なことではありません。
マスタやトランザクションを区別するよりも、アプリやデータの範囲を区別する方が実用的ですので、予約システムなら「resv_」やWebショップなら「shop_」またはアプリ名をプレフィックスにしましょう。

ここでは、サンプルデータですので単に「t_customer」としています。

カラム名

カラム名にもある程度の規則が必要です。
基本的にアプリ内で一意となるデータ(ID)については大文字で表記しましょう。

ここでは、t_customerには顧客を識別するIDが必要ですので「CID」を定義しています。 アプリユーザーなら「UID」、問い合わせデータなら「QID」といった要領で命名します。

データの種類によって、下表のように命名規則を適用します。

データの種類 データ型 長さ 命名規則
ID INT 11 大文字
例)CID UID QID
オートインクリメントID INT 11 ROWID
短い文字列 VARCHAR 20 小文字
長い文字列 VARCHAR 200 小文字
全角100文字以上の文章 TEXT 小文字
カンマ区切りのCSVデータ TEXT サフィックス(_csv)
牽引用のハッシュタグデータ TEXT サフィックス(_tag)
日時 DATETIME プレフィックス(tm_)
数値 INT 11 プレフィックス(n_)
小さい数値 SMALLINT 6 プレフィックス(n_)
大きい数値 BIGINT 20 プレフィックス(n_)
ON・OFFを表すフラグ TINYINT 1 プレフィックス(is_)(has_)(allow_)
並び順を表す数値 INT 11 n_index
次に、定義したカラムの内1つをプライマリーキー(主キー)に設定します。
プライマリーキーはテーブル内で行を特定させるもので、重複しない値ですので、IDカラムをプライマリーキーとします。

4. ストレージエンジン

ストレージエンジンとは、データを読み書きするためのプログラムの種類です。
MySQLではテーブルごとにエンジンを指定できますが、主に下記の2種類を使用します。

InnoDB

InnoDBは、関連する複数のテーブルへのデータの書き込を保証する「トランザクション」に対応しています。
データを読み書きするフロントエンドのアプリではInnoDBを使用します。
MyIsam

MyIsamは、読取り専用として利用する場合には非常に高速に動作します。
データウェアハウスを構築する場合はMyIsamを使用します。

テーブルを作成する際は、必ずストレージエンジンを確認して保存しましょう。

5. シーケンステーブル 定義

シーケンステーブルは、採番用のテーブルです。
上述のように、テーブル定義にはCIDやUIDのようなIDカラムをプライマリーキーにしますが、この値は採番テーブルから発行します。

右図のように、「ID」カラムのみからなるテーブルを定義します。
「ID」カラムはプライマリーキーに設定し、テーブル名にはサフィックス「_seq」を付加します。

ここでは、「t_customer」用の採番テーブルですので「t_customer_seq」としています。

6. シーケンステーブル 行挿入

シーケンステーブルには、あらかじめ1行のデータが必要です。
右図のように、値に「0」を指定して実行します。

これでID発行用に、1行1列のテーブルを準備できました。

7. IDの発行とデータ挿入

実際の処理フローでは以下のようにして、IDの発行とデータの挿入を行います。
下記コードは、Ajaxにてフォームデータを送信し、POSTイベントでデータ操作を行っています。

$dac = new DAC(Lib::connection(), "mysql");
try {
$dac->open();
$CID = $dac->setSequence("t_customer_seq");

$dac->setData("CID", $CID);
$dac->setData("name", $_POST["name"]);
$dac->setData("tel", $_POST["tel"]);
$dac->insert("t_customer");

$this->response("データを挿入しました。", true);

} catch (Exception $ex) {
$this->response($ex->getMessage(), false);
}

DACクラスのsetSequence()メソッドは、引数に指定したテーブルの「ID」カラムをインクリメントして返します。
次に、setData()メソッドでデータをセットし、insert()メソッドで挿入します。
DACクラスによるデータ操作については、PHP基礎学習 Chapter7. データベースアクセスを参照してください。

8. オートインクリメント

上述のように、アプリ内で一意な値である必要がある場合には、シーケンステーブルを定義しIDを発行しますが、
操作ログや、重要性の低い管理データなどでは、自動連番を使用します。

テーブル定義画面で「A_I」をチェックすると、データの挿入時に自動的に連番が発行されます。

$dac = new DAC(Lib::connection(), "mysql");
try {
$dac->open();

$dac->setData("ip_address", $_POST["ip_address"]);
$dac->setData("tm_action", date("Y-m-d H:i:s"));
$dac->insert("t_log");

$ROWID = $dac->getSequence();
$this->response("ROWIDは{$ROWID}です。", false);

} catch (Exception $ex) {
$this->response($ex->getMessage(), false);
}

上記例では、IPアドレスと実行時間を記録するテーブル「t_log」にデータを挿入しています。
オートインクリメントに設定するIDカラムは、行を特定するIDという意味で一般的に使用される「ROWID」と命名しましょう。