はじめてのHP
| 無料素材
| タグ辞典
| CSSガイドEX
| PHPを学ぼう!
◆Chapter 3 - SQLite(データベース)を作る
データベースについてまだよく理解いただけない方もいるでしょうか。
「Chapter 2 - 配列」でも紹介しましたエクセルをイメージすると、とても分かりやすくなります。
ID(Key) | name | kokugo | sansu | rika | syakai |
1 | 田中 | 82 | 83 | 99 | 81 |
2 | 山本 | 67 | 75 | 78 | 76 |
3 | 鈴木 | 89 | 88 | 62 | 78 |
4 | 小川 | 46 | 67 | 58 | 69 |
微妙に表が違うのにお気づきになりましたか?
1行目のタイトルが1バイト文字になっていますね。
これはデータベースでカラムと呼ばれる部分に相当するのですが、半角英数字を使うのが仕様となっているからです。
それともう一つ、 ID(Key) と呼ばれる部分です。
先の表では変数となっていましたがデータベースではこの ID(Key) が重要な役割を持っています。
これは Primary Key(プライマリーキー)と呼ばれるもので名称は自由に設定できますが重複したデータを入れることができません。
もし他の行と同じ内容を入れたとしても Primary Key が違えば別のデータとして扱われます。
新規のデータはデータベースが勝手に重複しないキーを埋め込んでいきます。
全く同じデータの登録があった時に区別するためのものなのでしょう。
勿論、この値の修正はできません。
データベースは、表計算ソフトのシートに近い考え方をしています。
表計算ソフトでは複数のシートを作成することができます。データベースでも複数のテーブルを持つことができるのです。
データベースの優れている点は、データを扱うことに特化しているということです。
テーブルとテーブルを関連付けた処理も可能です。
データベーファイルを新規に作成するには2つの方法があります。
- PHP から作成する
- SQLite が作成できるアプリケーションを利用する
※Firefox のアドオン SQLite Manager がお勧め!
ここでは PHP から作成する方法を紹介していきます。
次の表の内容をデータベーファイルとして作ってみましょう。
"name" は名前、"home は出身地、"year は生年です。
ID(Key) |
name |
home |
year |
1 |
大島優子 |
栃木県 |
1988 |
2 |
島崎遥香 |
埼玉県 |
1994 |
3 |
松井珠理奈 |
愛知県 |
1997 |
4 |
渡辺麻友 |
埼玉県 |
1994 |
5 |
指原梨乃 |
大分県 |
1992 |
6 |
柏木由紀 |
鹿児島県 |
1991 |
7 |
高橋みなみ |
東京都 |
1991 |
8 |
川栄利奈 |
神奈川県 |
1995 |
9 |
小嶋陽菜 |
埼玉県 |
1988 |
10 |
横山由依 |
京都府 |
1992 |
SQLite のファイルを作成するため、database.php を用意しました。
このファイルを実行してみてください。
【database.php】
1|<?php
2|//データベースに接続する
3|try{
4| $db = new PDO("sqlite:test.db");
5|}catch(PDOException $e){
6| echo "データベースにアクセスできません".$e->getMessage();
7| exit;
8|}
9|
10|//テーブルを作成する
11|$create_query = <<<__SQL__
12| CREATE TABLE IF NOT EXISTS personal(
13| id INTEGER PRIMARY KEY,
14| name text,
15| home text,
16| year INTEGER
17| );
18|__SQL__;
19|
20|//SQLを実行
21|$result = $db->exec($create_query);
22|
23|//エラーの処理
24|if($result === false){
25| print_r($db->errorInfo());
26| exit;
27|}
28|
29|//以前に挿入したことがあれば初期化
30|$db->exec("DELETE FROM personal");
31|
32|//データの設定
33|$data = array(
34| array("name"=>"大島優子", "home"=>"栃木県", "year"=>1988),
35| array("name"=>"島崎遥香", "home"=>"埼玉県", "year"=>1994),
36| array("name"=>"松井珠理奈", "home"=>"愛知県", "year"=>1997),
37| array("name"=>"渡辺麻友", "home"=>"埼玉県", "year"=>1994),
38| array("name"=>"指原梨乃", "home"=>"大分県", "year"=>1992),
39| array("name"=>"柏木由紀", "home"=>"鹿児島県", "year"=>1991),
40| array("name"=>"高橋みなみ", "home"=>"東京都", "year"=>1991),
41| array("name"=>"川栄利奈", "home"=>"神奈川県", "year"=>1995),
42| array("name"=>"小嶋陽菜", "home"=>"埼玉県", "year"=>1988),
43| array("name"=>"横山由依", "home"=>"京都府", "year"=>1992)
44|);
45|
46|//データの挿入
47|foreach($data as $i){
48| $name = $db->quote($i["name"]);
49| $home = $db->quote($i["home"]);
50| //文字にクウォートを足す('...')
51| $year = intval($i["year"]);
52| $result = $db->exec(
53| "INSERT INTO personal(name, home, year)".
54| "VALUES($name, $home, $year)");
55| if($result === FALSE){
56| print_r($db->errorInfo());
57| }
58|}
59|
60|//データの表示
61|echo "データベースファイルが作成しました。<br />";
62|echo "【内 容】<br />";
63|$stmt = $db->query("SELECT * FROM personal");
64|while($row = $stmt->fetch()){
65| $name = $row["name"];
66| $home = $row["home"];
67| $year = $row["year"];
68| echo "・{$name}さんは、{$year}年生まれの{$home}出身です。<br />";
69|}
70|?>
database.php と同じディレクトリに "test.db" のデータベースファイルが作成されたのが確認できます。
エクセルなどの表計算ソフトに例えると、 "test.db" のファイルが作成され、シートに "personal" が作られたことになります。
ではこのコードについての説明をしていきましょう。
データベースを扱うライブラリは幾つかあります。
どのライブラリも使い方にそれほど大きな違いはありませんが、メソッドの名前や引数の指定方法が少し違っています。
このコードでは、PDOを使っています。
PDO は、PHP Data Object の略で PHP5.1 以上で標準にバンドルされている軽量で高速なデータベースライブラリです。
2~8行はデータベースへの接続の処理をします。
3行目のtryで実際にデータベースへの接続を開始します。
4行目で赤文字の箇所にデータベースファイル名を指定してください。
4| $db = new PDO("sqlite:test.db");
SQLite は、組み込み型のデータベースなのでファイル名を指定するだけです。
仮にデータを用意しなければ空のデータベースファイルを作成します。
ファイル名の拡張子は、"sqlite"、"db"、"dat" など自由に設定もできます。
10~18行はデータベースのテーブルを作成する処理です。
ここではSQL 文(コマンド/命令)をヒアドキュメントで $create_query に代入しています。
12行目では、テーブル名を指定しテーブル、カラムを作成します。
表計算ソフトで例えると、シ-ト名 "personal" と、表題(カラム)を作成しているイメージに近いものがあります。
13~16行はカラム名、タイプを設定しています。
13| id INTEGER PRIMARY KEY,
14| name text,
15| home text,
16| year INTEGER
SQLite では入力タイプは、"INTEGER"(数字)か "text"(文字)しか選択できません。
13行目の "PRIMARY KEY" は、データベースが自動に割り振る重複しない ID のようなものです。
特に設定しなければ、データベースが勝手に作ります。
13~16行を実行したら次のイメージのようなテーブルが "test.db" のファイルに作成されます。
32~44行は、挿入する10件のデータを多元配列で指定しています。
46~58行はテーブルに登録する処理です。
foreach を使って、$data 内のデータを登録しています。
通常、入力タイプがテキストの場合には、
$name = $db->quote($i["name"]);
$home = $db->quote($i["home"]);
のように文字にクウォートを足す('...')する必要があります。
クウォートしなければデータに不具合を起こすことがあるです。
数字は、intval しておくとよいでしょう。
53行目は、テーブルに挿入するカラムを指定します。
"INSERT INTO personal(name, home, year)"
54行目は、カラムに挿入する値を指定します。
"VALUES($name, $home, $year)"
カラムに値を挿入する場合、双方に整合性を持たせる必要があります。
ここで挿入する値を間違えますと、今後データベースの検索や修正、削除に間違いを起こすことがあります。
60~69行はデータベースに登録された内容を取り込み書き出す処理をしています。
63行目ではデータベースファイルの "personal" のデータを変数 $stmt に代入しています。
63|$stmt = $db->query("SELECT * FROM personal");
64~69行では $stmt の内容を書き出す処理をしています。
一括ダウンロードから、"database.php" のファイルがダウンロードできます。


|