PHP マニュアル
前のページ |  | 次のページ

# CXLVI. SQLite 関数

# 導入

この拡張モジュールは、SQLLite Embeddable SQL Database Engine 用の 拡張モジュールです。SQLiteは、組込み可能なSQLデータベースエンジン を実装するCライブラリです。SQLiteライブラリをリンクするプログラム は、別のRDBMSプロセスを実行することなくSQLデータベースにアクセス することができます。

SQLiteは、巨大なデータベースサーバーに接続するために使用されるク ライアントライブラリではありません。 SQLiteがそのサーバーなのです。 SQLiteライブラリは、ディスク上のデータベースを直接読み書きします。

> 注意: より詳細な情報については、SQLiteのWebサイト (http://sqlite.org/) を参照してください。

# インストール

このパッケージに付属するINSTALLファイルを読んでください。 または、単にPEARインストーラで pear install sqlite を実行して下さ い。SQLite自体も既に含まれており、他のソフトウエアをインストール する必要は全くありません。

Windowsユーザは、DLL版のSQLite拡張モジュールを次の場所から入手可 能です。 (php_sqlite.dll)

PHP 5 では、SQLite 拡張モジュールとエンジンは PHP 自身にバンドルされ、デフォルトでコンパイルされます。 しかし、PHP 5.1.0 以降では 手動で有効にする必要があります （共有モジュールとしてバンドルされるからです）。 さらに、PHP 5.1.0 以降では SQLite は PDO に依存するようになりました。そのため、 `php.ini` に以下の行を (この順に) 追加して PDO も 有効にしておく必要があります。

    extension=php_pdo.dll
    extension=php_sqlite.dll

Linux あるいは Unix オペレーティングシステムでは、 もし PDO を共有モジュールとしてビルドしたのなら SQLite も共有モジュールとしてビルドする必要があります。 そのためには、設定オプション --with-sqlite=shared を指定します。

SQLite 3 は、PDO SQLite でサポートされます。

> 権限を持たないアカウントに対する Windows 版のインストール: Windows オペレーティングシステムでは、権限のないアカウントは デフォルトで設定される TMP 環境変数を利用できません。 これにより SQLite は Windows ディレクトリにテンポラリファイルを作成しますが、 望まれるものではありません。 そのため Web サーバもしくは Web サーバが動作しているユーザーアカウントに対して TMP 環境変数を設定すべきです。 もし、Apache を使用しているなら、`httpd.conf` ファイル内で SetEnv ディレクティブを使用することで実現可能です。 例えば、次のような感じです。

>     SetEnv TMP c:/temp

> もしサーバレベルでこの設定を行うことができないのであれば、 スクリプト内で設定することができます。

> `putenv('TMP=C:/temp');`

> この設定は Web サーバがファイルを生成した後で書き込んだり削除したりする 権限を持たせるディレクトリを指定する必要があります。 そうでない場合、次のようなエラーメッセージを受け取るでしょう。 `malformed database schema - unable to open a temporary database file for storing temporary tables`

# 要件

以下の関数を利用可能とするには、SQLiteサポートを有効にしてPHPをコ ンパイルするか、php.iniで動的にSQLite拡張モジュールをロードする必 要があります。

# リソース型

SQLiteインターフェイスでは2種類のリソースが使用されています。最初 のリソースはデータベース接続で、2番目は結果セットです。

# 定義済の定数

関数sqlite_fetch_array() と sqlite_current() は、結果配列の種別を表すために定 数を使用します。以下の定数が定義されています。

SQLite 結果型定数

`SQLITE_ASSOC` (int)

  カラムは、フィールド名を配列インデックスとする配列に返されます。

`SQLITE_BOTH` (int)

  カラムは、数値インデックスとフィールド名による配列インデックスを 共に有する配列に返されます。

`SQLITE_NUM` (int)

  カラムは、フィールドへの数値インデックスを有する配列に返されます。 このインデックスは 0 から始まり、結果の先頭フィールドとなります。

関数の戻り値はステータスコードです。以下の定数が定義されています。

SQLite ステータスコード定数

`SQLITE_OK` (int)

  成功しました

`SQLITE_ERROR` (int)

  SQL エラーあるいはデータベースが存在しません

`SQLITE_INTERNAL` (int)

  SQLiteの内部ロジックエラーです

`SQLITE_PERM` (int)

  アクセス権限がありません

`SQLITE_ABORT` (int)

  コールバックルーチンが中断を要求しました

`SQLITE_BUSY` (int)

  データベースファイルがロックされています

`SQLITE_LOCKED` (int)

  データベース内のテーブルがロックされています

`SQLITE_NOMEM` (int)

  メモリの割り当てに失敗しました

`SQLITE_READONLY` (int)

  読み込み専用データベースに書き込もうとしました

`SQLITE_INTERRUPT` (int)

  処理が内部的に終了しました

`SQLITE_IOERR` (int)

  ディスク I/O エラーが発生しました

`SQLITE_CORRUPT` (int)

  データベースのディスクイメージが不正です

`SQLITE_NOTFOUND` (int)

  (内部的な) テーブルもしくはレコードが存在しません

`SQLITE_FULL` (int)

  データベースが一杯のため挿入に失敗しました

`SQLITE_CANTOPEN` (int)

  データベースファイルをオープンできません

`SQLITE_PROTOCOL` (int)

  データベースロックプロトコルエラーです

`SQLITE_EMPTY` (int)

  (内部的な) データベーステーブルが空です

`SQLITE_SCHEMA` (int)

  データベーススキーマが変更されました

`SQLITE_TOOBIG` (int)

  テーブルの 1 行に対するデータが多すぎます

`SQLITE_CONSTRAINT` (int)

  制約違反のため中止しました

`SQLITE_MISMATCH` (int)

  データ型が一致しません

`SQLITE_MISUSE` (int)

  ライブラリが不正確に使用されました

`SQLITE_NOLFS` (int)

  OS 機能の使用はホスト上でサポートされていません

`SQLITE_AUTH` (int)

  認証に失敗しました

`SQLITE_ROW` (int)

  内部プロセスが他の行を準備しました

`SQLITE_DONE` (int)

  内部プロセスが実行を完了しました

# 定義済みクラス

## SQLiteDatabase

オープンされている SQLite データベースを表す

### コンストラクタ

- __construct - 新規 SQLiteDatabase オブジェクトを生成する

### メソッド

- query - クエリを実行する

- queryExec - 結果を返さないクエリを実行する

- arrayQuery - クエリを実行し、結果を配列として返す

- singleQuery - クエリを実行し、単一カラムに対する配列もしくは先頭行の値を返す

- unbufferedQuery - バッファされていないクエリを実行する

- lastInsertRowid - 直近に挿入された行の行 ID を返す

- changes - 直近のステートメントにより更新された行数を返す

- createAggregate - SQL ステートメントで使用する集約 UDF を登録する

- createFunction - SQL ステートメントで使用する UDF を登録する

- busyTimeout - ビジータイムアウト時間を設定または無効にする

- lastError - 直近に発生したエラーのエラーコードを返す

- fetchColumnTypes - 特定のテーブルからカラム型の配列を返す

## SQLiteResult

バッファされた SQLite の結果セットを表す

### メソッド

- fetch - 結果セットから次行を配列として取得する

- fetchObject - 結果セットから次行をオブジェクトとして取得する

- fetchSingle - 結果セットから先頭カラムを文字列として取得する

- fetchAll - 結果セットから全行を配列の配列として取得する

- column - 結果セットの現在行からカラムを取得する

- numFields - 結果セット内のフィールド数を返す

- fieldName - 結果セット内の特定フィールドの名前を返す

- current - 結果セットから現在行を配列として取得する

- key - 現在行のインデックスを返す

- next - 次の行番号へシークする

- valid - まだ行が残っているかどうかを返す

- rewind - 結果セットの先頭の行番号へシークする

- prev - 結果セットの前の行番号へシークする

- hasPrev - 前の行が利用可能かどうかを返す

- numRows - 結果セットの行数を返す

- seek - 特定の行番号へシークする

## SQLiteUnbuffered

バッファされていない SQLite 結果セットを表します。 欠課されていない結果セットはシーケンシャルで、前方シークのみ可能です。

### メソッド

- fetch - 結果セットから次行を配列として取得する

- fetchObject - 結果セットから次行をオブジェクトとして取得する

- fetchSingle - 結果セットから先頭カラムを文字列として取得する

- fetchAll - 結果セットから全行を配列の配列として取得する

- column - 結果セットの現在行からカラムを取得する

- numFields - 結果セット内のフィールド数を返す

- fieldName - 結果セット内の特定フィールドの名前を返す

- current - 結果セットから現在行を配列として取得する

- next - 次の行番号へシークする

- valid - まだ行が残っているかどうかを返す

# 実行時設定

`php.ini` の設定により動作が変化します。

表 1. SQLite設定オプション

名前 | デフォルト | 変更の可否 | 変更履歴
--- | --- | --- | ---
sqlite.assoc_case | 0 | PHP_INI_ALL | PHP 5.0.0 から利用可能です

PHP_INI_* 定数の詳細および定義については 付録G を参照してください。

以下に設定ディレクティブに関する 簡単な説明を示します。

sqlite.assoc_case int

  ハッシュのインデックスに大文字小文字混用(0)、 大文字(1)、小文字 (2)のど れを使用するかを指定します。

  このオプションは、データベーススキーマ中での実際のフィールド名の ケースによらず、カラム名が常に大文字または小文字で返されるような 他のデータベースシステムとの互換性が必要な場合に特に有用です。

  SQLiteライブラリは、カラム名をそのままのケース(これは、 スキーマで使用したケースに一致します)で返します。 sqlite.assoc_case に 0 を指定した場合、そのままのケースは保持されます。このオプションを 1 または 2 に設定した場合、 PHPはハッシュキーのケースをそれぞれ大文字または小文字のキーに変 換します。

  このオプションを使用することで若干の性能劣化がありますが、 PHPスクリプトで自分で大文字/小文字変換を行うよりはかなり高速です。

前のページ | ホーム | 次のページ
spl_classes | 上に戻る | sqlite_array_query