データベースを利用して書き込み・読み出しをしてみよう

Webサイトで、情報を発信する以外に問い合わせフォームを設置し、問い合わせ内容を蓄積して顧客情報を管理したり、WebカートシステムやCMSを設置してコンテンツ管理を行うなど、情報を管理する場合には「データベース」を利用します。

今回はデータベースの利用方法を紹介します。

 

 

■利用準備

■データを登録する

■データを抽出する

■データを更新する

■データを削除する

 

 

■利用準備

SuiteXでは、データベースサーバーとしてMySQLを提供しています。
デフォルトでは3つまで無料で利用できるので、コントロールパネルから利用準備を行ってみましょう。

 

まずは、サイトマネージャーより「MySQL管理」→「MySQLのON-OFF」をクリックします。

 

するとデータベース1〜3が表示されます。

自動で3つまでデータベース名やアクセスするためのユーザ名が設定されています。

利用したいデータベースの「ON/OFF」の「ONにする」にチェックをいれて「設定」ボタンをクリックしてください。

 

 

図1 MySQLの設定

図1 MySQLの設定

 

 

データベースを管理するツールとして「phpMyAdmin」が用意されています。

データベースの構造を設定したり、登録されている内容を確認することができます。

 

「phpMyAdminを開く」をクリックし、表記されているDBユーザー名でアクセスすると、先ほどONにしたデータベースが表示されます。

 

図2 MySQLデータベース

図2 MySQLデータベース

 

データベースには「テーブル」という箱を用意し、その中に「カラム」というデータに付与させる要素を定義します。

例として商品ID、商品名、金額、在庫を一つの商品データとして登録すると定義した場合、商品名や金額に当たる要素がカラムになります。

カラムには登録するデータの形式(文字列型や数値型など)や最大桁数などを設定することができます。

これらのカラムを含んだ1つのデータを「レコード」といい、1レコードが1商品を構成するデータになります。

 

上記を定義した上でデータを操作します。

 

図3 カラムを登録する

図3 カラムを登録する

 

これでデータベースを利用する準備が整いました。

 

 

■データを登録する

データベースに対してデータを操作する際は「SQL」を利用します。

SQLとはデータベースを操作するための問い合わせ言語です。

 

試しにphpMyAdmin上でSQLを実行して、データを登録してみましょう。

SQLタブをクリックするとSQL文を入力する枠が表示されます。

こちらでSQL文を入力し実行することで、データの登録や抽出が行えます。

 

データの登録にはinsert文を利用します。

productテーブルに商品を登録するには次のようなSQLを実行します。

 

insert into product (name,price,stock) values ("りんご", 100, 10);

 

上記を実行すると1レコードが追加されます。

 

insert into テーブル名 (カラム名) values (挿入したいデータ);

上記のように挿入したいテーブル名にカラムを指定、指定したカラムに合わせて挿入したいデータをvaluesの後に記載します。

正しく登録できるとテーブルにレコードが1つ増えています。

 

図4 データを登録する

図4 データを登録する

 

 

 

■データを抽出する

登録されたデータを抽出する場合はselect文を利用します。

 

select * from product;

 

上記を実行すると、productテーブルに登録されているデータを全て抽出します。

 

図5 データを抽出する

図5 データを抽出する

 

「*」にはカラムを指定することで特定のカラムのみ取得することもできます。

例えばnameとpriceのみ取得したい場合は、

 

select name,price from product;

 

上記を実行します。

また、where句を利用することで特定条件を付与し、その条件にマッチしたデータのみ抽出することができます。

例えばstockが10個以上の商品を取得する場合は、

 

select * from product where stock >= 10;

を実行します。

 

■データを更新する

登録されいてるデータを更新する場合は、update文を利用します。

 

update product set price = 1000 where id = 1;

 

上記は、productテーブルの中のidが1であるレコードに対してpriceの値を1000にするという記述です。

 

図6 データを更新する

図6 データを更新する

 

update文を利用する場合は必ずwhere句を利用します。

省略することは可能ですが、省略した場合、全てのレコードに対してupdate文が実行されてしまいます。

上記の例でいうと全てのデータの金額が1000になってしまいますので十分注意しましょう。

 

 

■データを削除する

データを削除する際はdelete文を利用します。

 

delete from product where id = 1;

 

上記を実行することで、productテーブルの中のidが1のレコードを削除することができます。

 

図7 データを削除する

図7 データを削除する

 

update文と同様、利用する際は必ずwhere句を利用します。

省略してしまうとテーブル内の全てのレコードが削除されてしまいますので、注意が必要です。

 

これらのSQLを利用し、PHPで問い合わせフォームなどのシステムを作成、実行させることでデータベースへの登録や更新をすることが可能です。

ただしPHPでSQLを扱う場合、送信データをそのまま利用してしまうロジックを利用すると、SQLインジェクションというデータベースの不正操作を引き起こすことになってしまいます。

PHPで利用する場合はPDOやMYSQLiなどのデータベース接続クラスが用意されており、SQLインジェクション対策を容易に行えるので、導入の際は次のようなロジックを構築してデータベースの操作を行いましょう。

 

 

// PDOを利用する例

 

// postデータを受け取り

$data = $_POST;

 

// 接続データベース情報

define('DATABASE_NAME','データベース名');

define('DATABASE_USER','データベース接続ユーザ名');

define('DATABASE_PASSWORD','データベースパスワード');

define('DATABASE_HOST','データベースホスト名(指定があれば)');

define('PDO_DSN','mysql:dbname=' . DATABASE_NAME .';host=' . DATABASE_HOST . '; charset=utf8');

 

//DBコネクション

$pdo = new PDO( PDO_DSN, DATABASE_USER, DATABASE_PASSWORD);

 

// データの保存

$smt = $this->pdo->prepare('insert into post (name,email,body,created_at,updated_at) values(:name,:email,:body,now(),now())');

$smt->bindParam(':name',$data['name'], PDO::PARAM_STR);

$smt->bindParam(':price',$data['price'], PDO::PARAM_STR);

$smt->bindParam(':stock',$data['stock'], PDO::PARAM_STR);

$smt->execute();

 

 

 

 

 

うちだ
サービスクリエーション本部所属        (監修:とみなが)       

オススメ記事