PHPを学ぼう!

▼PHPを学ぶチャプターです。


660円から使える!

 

素材メニュー

 ◆Chapter 1

 ◆Chapter 2

 ◆Chapter 3

 ◆Chapter 4

 

制作ヒント

 ◆制作のヒント

 

レッスンメニュー

 ◆Chapter2 練習問題

 ◆Chapter3 DB練習問題

 

サイト運営者がPHPを学んだ
お勧めの書籍です!
これ一冊で基本的なPHPの仕組み、簡単なプログラムの作成、SQLiteを使ったデータベースなどかなり学べる要素が詰まっています!

↓↓↓ ↓↓↓

PHPレッスンブック―PHP5対応

新品価格
¥2,520から
(2013/2/24 04:38時点)

 

 

サイバーテロの技法について書かれた書籍です!
ハッカーの手法を知ることでご自身のサイトがハッカーに攻撃されたときそれを防ぐ手法を紹介しています。

↓↓↓ ↓↓↓

PHPサイバーテロの技法―攻撃と防御の実際

新品価格
¥1,890から
(2013/11/5 10:09時点)

 

 

★初年度100円! サブドメインやメールアカウントを無制限に設置できます。
PHPやCGIは勿論、WordPress、Movable Type Open Source、掲示板、ブログ、ショッピングサイトなどが簡単に導入できるので複数サイトを運営したい場合に便利なサービスです。

↓↓↓ ↓↓↓

 

PHPが動作するサーバー

 

はじめての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" のファイルに作成されます。

id

name

home

year

 

 

 

 

 

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" のファイルがダウンロードできます。

一括ダウンロード

DB練習問題

 

 

 

 

 

 

 

 

 

 

 

 

ex-mode.net | ツールEX | 素材EX | アフィモール | 初級者向 初めてのホームページ作り | Htmlタグ辞典 | 初めてのプランター菜園 | リンク・ボード
気のみ気のままなブログ | CSSガイドEX | ホビ★コレ | 班長日記!

▲UP

Copyright (C) ex-mode.net 2017. All Rights Reserved.