毎回の授業の最初に出席メールを提出せよ.
PHP はいろいろなデータベースをサポートしている. PHP からデータベースを利用するためにはそのデータベース固有の アクセス方法を使用する方法と PEAR DB のようなデータベースに依存しない ライブラリを用いる方法とがある.
データベース固有のアクセス方法を使うと効率が良く,そのデータベースが 本来持っている全機能を利用できるが移植性が悪い. PEAR DB のような共通ライブラリから 1 クッションおいてアクセスすると 効率は少し落ちるが後からのデータベースの変更などに対応できる. この教科書では PEAR DB を使う方法を説明する.
リレーショナルデータベース管理システムがデータを管理する. データは表形式で管理される.
リレーショナルデータベースへの問い合わせに使う言語が SQL(Structured Query Language).
SQL は大きく DML(Data Manipulation Language) と DDL(Deta Definition Language) に分けられる.
MySQL の操作法については MySQL日本語マニュアル を参照.
MySQL サーバ には複数のデータベースがあり, 一つのデータベースは複数のテーブルを含む. 一つのデータベースを指定し,その中の複数のテーブルにアクセスして 作業するのが一般的である.
すでに実験サーバに作成済みのデータベースを使って SQL 文による操作を
実演する.SQL文とは以下のようなものである
select * from books;
select * from authors;
教科書の p.212 の例について教卓パソコンからコマンドラインで実演する.
この実験サーバではすでに PEAR DB がインストールされている.
教科書 p.213 例 8-1 を bookauthor.php というファイル名で入力し確認せよ,
作成済みのテーブルの内容に
アクセスし,表示が行われる.ただし,9 行目
$db = DB::connect(...)
の行は授業中の指示に従って書き換えよ.
require_once('DB.php'); で DB クラスを読み込んでいる. DB.php はインクルードパスと呼ばれるユーザが共通にアクセスできる ディレクトリにおかれている.(本サーバでは /usr/share/php)
データソース(DSN)名とは教科書 p.213 例 8-1 の
mysql://librarian:password@localhost/library
のことである.この例では使用するデータベースは mysql で,
ユーザ名 librarian, パスワードを password として
サーバ localhost の library というデータベースを使うことを指示している.
ここで使用するデータベースが固定される.
DSN が決まれば DB::connect() を使ってデータベースに接続する. 例8-1 では 9 行目で DSN を引数として呼出し,結果をオブジェクトとして $db に返している.
DB::iserror() でエラーチェックを行う.エラーメッセージは getMessage() で取得できる
query メソッドでデータベースに SQL を送信する.例 8-1 では 20 行目. 8.2 節で紹介したような SQL 文を送信する.例 8-1 では books と authers の 2 つのテーブルのうち,autorid 欄が統一 IDであるとして 一つにまとめたものを得る SQL 文である.
例8-1 の 15-18行目 で
データベースに与えたい SQL 文を
変数 $sql に格納し,20 行目の
$q = $db->query($sql);
で SQL 文をデータベースに送った結果をオブジェクト $q に格納している.
SQL 文の結果 $q に fetchRow や fetchInto メソッドを使用することで 行単位で保存することができる.
教科書例8-1 bookauthor.php を参考に authors テーブルの全内容について authorid, name を表示するスクリプト allauthors.php を作れ.
ヒント:
クエリは
$sql ="SELECT authors.authorid,authors.name
FROM authors
ORDER BY authors.authorid ASC";
とすればよい.
出力のテーブル要素では表が2列(例8-1では3列)になるので 一つの tr 要素の中の td 要素が 3 個だったものを 2 個に変更する.
例題 8 を参考に books テーブルの全内容について bookid, authorid, title, ISBN, pub_year を表示するスクリプト allbooks.php を作れ.
これまで使用したデータベースの books テーブルに対し,教科書 p.212 の INSERT を実行する スクリプトを insertbook.php という名前で作れ.入力可能な項目名は authorid, title, ISBN, pub_year とする.
ヒント:
フォームを使用する.text 型の input 要素を 4 個
表示し,それぞれのパラメータ名を authorid, title, ISBN, pub_year に
する.
INSERT はデータの入力なのでデータベースの内容が変化する.
このため POST メソッドを使用する.
自己参照型のスクリプトとして,上記 4 個どれかのパラメータが設定されていない
ときは入力フェーズとし,すべてが設定されているときは処理フェーズとする.
処理フェーズでは $_POST から
それぞれのパラメータの値を取り出し,変数
$authorid, $title, $isbn, $pub_year にコピーして
クエリ文字列を以下のように設定する.
$sql = "INSERT INTO books (authorid, title, ISBN, pub_year)
VALUES ($authorid, '$title', '$isbn', $pub_year)";
これを $q = $db->query($sql); として処理すればよい.
authors テーブルに対し,例題 10 と同様に INSERT 処理を行う スクリプトを insertauthor.php という名前で作れ.入力可能な項目名は name のみとする.
第 9 回課題「数字当てゲーム 2」 を提出せよ.