特集
2004/05/28 18:30 更新

UNIX USER 2004年6月号「実践! 最新PHP 5」より転載:
Part 3 PHP 5に標準バンドルされた機能 (1/3)

PHP 5では、さまざまな機能が標準でバンドルされている。その中でも目玉となるのが、シンプルなDBMSであるSQLite、汎用XMLパーサーSimpleXML、SOAPライブラリだ。Part 3では、これらの機能について解説する。

UNIX USERPHP 5では、さまざまな機能が標準でバンドルされている。その中でも目玉となるのが、シンプルなDBMSであるSQLite、汎用XMLパーサーSimpleXML、SOAPライブラリだ。Part 3では、これらの機能について解説する。

INDEX Part3 PHP 5に標準バンドルされた機能
1. SQLite
2. SimpleXML
3. SOAP


SQLite

 PHP 5からバンドルされたSQLiteとは、MySQLやPostgreSQLと同じ、DBMSの一種である(図1)。まずはSQLiteについて解説しよう。

zu1.png

図1 SQLiteの概念図

SQLiteとは

 PHPと組み合わせて使用されているDBMSといえば、MySQLもしくはPostgreSQLが最初に思い浮かぶ。だが、PHPがサポートしているDBMSは、この2種類だけではない。表1のように、PHPでは数多くのDBMSをサポートしている。

hyo1.jpg

表1 PHP 4がサポートするDBMS一覧(クリックで拡大します)

 また、表の中にはないが、PHP 4では拡張モジュールを組み込むことでSQLiteというDBMSを利用できる。PHP 5では、このSQLiteを標準でサポートしている。

 SQLiteとは、MySQLやPostgreSQLなどに代表されるクライアント/サーバー型のDBMSと違い、DBMSサーバーという概念が一切存在しない。クライアントとサーバーが一体となっており、データベースの内容はすべてローカルファイルに保存される。

SQLiteの長所

 SQLiteの長所の1つは、簡単に導入できることである。PEARのDBクラスもSQLiteに対応しているので、MySQLやPostgreSQLと同じ要領で扱えるのは、至極便利で手軽である。

 また、もう1つの長所として、DBMSサーバーを必要としない点が挙げられる。DBMSが用意されていないレンタルサーバーでも、SQLiteを使えば誰でもデータベースを用いたアプリケーションを作成できる。PHP 5の普及に伴って、いずれSQLiteをサポートするレンタルサーバーが増えていくであろう。

 このほかの長所としては、トランザクションに対応している点が挙げられる。SQLiteのような仕組みのDBMSでは、トランザクションに対応していないケースが多いので、その点では非常にありがたい。

SQLiteの短所

 さて、ここまでいくつか長所を挙げたが、もちろんSQLiteには短所も存在する。

 SQLiteの短所は、あくまでもローカルファイルにデータを持つ点だ。そのため、複数のWebサーバーからアクセスを受けるような芸当はできない。ロードバランサを導入している環境での利用など、複数のWebサーバーで運用するケースには適さないと考えたほうが賢明であろう。

利用法

 PHP 5ではSQLiteを標準でバンドルしているため、これといった準備は一切必要ない。また、SQLiteはPEARのDBクラスでもサポートされている。PEARのDBクラスを用いてMySQLやPostgreSQLを制御した経験がある方は、SQLite用の関数を用いて直接制御するよりも、PEARのDBクラスの利用をお勧めする。

 リスト1のサンプルスクリプトは、テーブルを作成、テスト用に10件の行を追加、テーブルの内容を取得、すべての処理が終わったらテーブルを削除、という処理を行っている(図2)。

リスト1 SQLiteの利用
1 <?PHP
2 require_once("DB.php");
3
4 // PEAR DBで使うDSNの設定
5 $dsn = array(
6 "phptype" => "sqlite",
7 "database" => "./example.db");
8
9 // DBに接続
10 $db = DB::connect($dsn);
11 if (DB::isError($db)) {
12 exit($db->getMessage());
13 }
14
15 // テーブルの作成
16 $result = $db->query(
17 "CREATE TABLE foo(id serial, title varchar(100), comment text)");
18 if (DB::isError($result)) {
19 exit($result->getMessage());
20 }
21
22 // 行の追加
23 for ($i = 0; $i < 3; $i++) {
24 $result = $db->query(
25 "INSERT INTO foo(title,comment) values(?,?)",
26 array(
27 "{$i} day after",
28 date("Y-m-d",
29 time() + 86400 * $i)
30 ));
31 if (DB::isError($result)) {
32 exit($result->getMessage());
33 }
34 }
35
36 // テーブルの内容をすべて取得
37 $result = $db->getAll(
38 "SELECT id,title,comment FROM foo ORDER BY id DESC");
39 if (DB::isError($result)) {
40 exit($result->getMessage());
41 }
42
43 // 取得結果の表示
44 echo "<plaintext>";
45 print_r($result);
46
47 // テーブルの削除
48 $result = $db->query("DROP TABLE foo");
49 if (DB::isError($result)) {
50 exit($result->getMessage());
51 }
52
53 // DBの切断
54 $db->disconnect();
55 ?>

zu2.jpg

図2 SQLiteの実行サンプル

 このスクリプトの5〜7行目で定義しているDSN(Data Source Name)がDBMSの種類と設定情報になる。「phptype」が接続に用いるDBMSの種類で、「sqlite」でSQLiteが用いられる。SQLiteではデータベースの内容を記録しておくファイル名を「database」に指定する。

 DSNの内容を修正するだけで、このスクリプトをほかのDBMS用にするのも容易に実現できる。裏を返せば、ほかのDBMSからSQLiteに移行するのも容易なのである。

      | 1 2 3 | 次のページ

[照井進吾,UNIX USER]

Copyright(C) 2010 SOFTBANK Creative Inc. All Right Reserved.