SQLite3へ接続する3つの方法
SQLite3 データベースは、インメモリ、テンポラリ、ファイル指定の3つの方法で接続することができます。
1 2 3 4 5 6 7 8 9 10 |
<?php try{$sqlite3インメモリ = new SQLite3(":memory:");} catch(Exception $e){ echo $e->getMessage() ; } try{$sqlie3テンポラリ = new SQLite3("");} catch(Exception $e){echo $e->getMessage(); } try{$sqlite3 = new SQLite3("sqlite3.db"); } catch(Exception $e){echo $e->getMessage(); } |
各接続方法の特徴と主な用途を表にしています。
特徴 | 用途 | |
インメモリ | メモリ上にsqlite3データベースを保持します。 非永続データベースです。 切断でデータベースは消失します。 |
超高速アクセスが必要 |
テンポラリ | ファイルシステム上のテンポラリ領域にsqlite3データベースを保持します。 非永続データベースです。 切断でデータベースは消失します。 |
データベースファイル削除を管理したくない |
ファイル | sqlite3の一般的な使い方です。指定したパスにあるsqlite3データベースを接続、または新規作成+接続します。 永続データベースです。 切断してもデータベースは最後の状態で残ります。 |
データベースを使いたい |
ここまで、インメモリ、テンポラリ、ファイルのSQLite3へ接続する3つの方法を説明してきました。
SQLite3へ接続する際、flagオプションを指定できます。インメモリ、テンポラリはこのオプションを指定しないでください。
ここからは、SQLite3ファイルへ接続するオプション、バリエーションをご紹介します。
SQLite3ファイルへ接続する際のオプション
SQLite3は以下のようにオプションを指定できます。
$sqlite3 = new SQLite3( $filename[, int $flags = SQLITE3_OPEN_READWRITE | SQLITE3_OPEN_CREATE [, string $encryption_key = null ]] ) ;
- フルパス指定:new SQLite3(“/path-to-sqlite3/sqlite3.db”);
- 相対パス指定:new SQLite3(“../../sqlite3.db”);
- ファイル名のみの指定:new SQLite3(“sqlite3.db”);
- SQLITE3_OPEN_READONLY: データベースを読み込み専用でオープンする
- SQLITE3_OPEN_READWRITE: データベースを読み書き共用でオープンする
- SQLITE3_OPEN_CREATE: データベースが存在しない場合は作成する
指定できる3つのパラーメータのバリエーションは以下のようになります。
- 読み書きオープン、ファイルがない場合新規作成
new SQLite3(“sqlite3.db”);
new SQLite3(“sqlite3.db”,SQLITE3_OPEN_READWRITE | SQLITE3_OPEN_CREATE); - 読み取り専用オープン、ファイルがなければエラー
new SQLite3(“sqlite3.db”, SQLITE3_OPEN_READONLY); - 読み書きオープン、ファイルがなければエラー
new SQLite3(“sqlite3.db”, SQLITE3_OPEN_READWRITE);
ファイルパスに書き込み権限がない、ファイルが存在しない(SQLITE3_OPEN_CREATE指定なし)では以下例外が発生します。
「Unable to open database: unable to open database file」
公式の暗号化方法の他、オープンソース、サードパーティからも提供されています。
SQLite3のC/C++ APIはURIを使ってvfs、cache、nolock等のオプションを指定することができます。
PHP5.3以降は、sqlite3_open_v2を使って接続します。
(SQLITE_VERSION_NUMBER >= 3005000の場合)
オプションは、sqlite3_open_v2へ伝わりません。
例えば、new SQLite3(“sqlite3.db?mode=ro”)とリードオンリーパラメーターを指定すると
sqlite3.db?mode=roのファイル名でsqlite3データベースが新規作成されます。
PHPでは、URIを使った接続方法はできません。
また、PHPのSQLite3の実装(PDO、SQLite3)はVFSに対応していません。