特集
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では、これらの機能について解説する。
PHP 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について解説しよう。
SQLiteとは
PHPと組み合わせて使用されているDBMSといえば、MySQLもしくはPostgreSQLが最初に思い浮かぶ。だが、PHPがサポートしているDBMSは、この2種類だけではない。表1のように、PHPでは数多くの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 ?> |
このスクリプトの5〜7行目で定義しているDSN(Data Source Name)がDBMSの種類と設定情報になる。「phptype」が接続に用いるDBMSの種類で、「sqlite」でSQLiteが用いられる。SQLiteではデータベースの内容を記録しておくファイル名を「database」に指定する。
DSNの内容を修正するだけで、このスクリプトをほかのDBMS用にするのも容易に実現できる。裏を返せば、ほかのDBMSからSQLiteに移行するのも容易なのである。
[照井進吾,UNIX USER]
Copyright(C) 2010 SOFTBANK Creative Inc. All Right Reserved.