Forum und email

SQLite 関数

導入

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

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

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

インストール

このパッケージに付属する INSTALL ファイルを読んでください。 または、単に PEAR インストーラで pecl 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 の設定により動作が変化します。

SQLite設定オプション
名前 デフォルト 変更の可否 変更履歴
sqlite.assoc_case 0 PHP_INI_ALL PHP 5.0.0 から利用可能です
PHP_INI_* 定数の詳細および定義については php.ini ディレクティブ を参照してください。

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

sqlite.assoc_case int

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

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

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

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

目次

  • sqlite_array_query — 指定したデータベースに対してクエリを実行し、配列を返す
  • sqlite_busy_timeout — ビジータイムアウト時間を設定またはビジーハンドラを無効にする
  • sqlite_changes — 直近のSQLステートメントにより変更されたレコード数を返す
  • sqlite_close — オープンされたSQLiteデータベースを閉じる
  • sqlite_column — カレントの結果セットのレコードからカラムを1列取得する
  • sqlite_create_aggregate — SQLステートメントで使用する集約UDFを登録する
  • sqlite_create_function — SQLステートメントで使用するために"通常の"ユーザ定義関数を登録する
  • sqlite_current — 結果セットからカレントのレコードを配列として取得する
  • sqlite_error_string — エラーコードの説明を返す
  • sqlite_escape_string — クエリパラメータ用に文字列をエスケープする
  • sqlite_exec — 与えられたデータベースに対して結果を伴わないクエリを実行する
  • sqlite_factory — SQLite データベースをオープンし、SQLiteDatabse オブジェクトを返す
  • sqlite_fetch_all — 結果セットから全てのレコードを配列の配列として取得する
  • sqlite_fetch_array — 結果セットから次のレコードを配列として取得する
  • sqlite_fetch_column_types — 特定のテーブルからカラム型の配列を返す
  • sqlite_fetch_object — 結果セットから次のレコードをオブジェクトとして取得する
  • sqlite_fetch_single — 結果セットの最初のカラムを文字列として取得する
  • sqlite_fetch_string — sqlite_fetch_single のエイリアス
  • sqlite_field_name — 特定のフィールドの名前を返す
  • sqlite_has_more — まだレコードがあるかないかを返す
  • sqlite_has_prev — 前のレコードがあるかどうかを返す
  • sqlite_key — カレントレコードのインデックスを返す
  • sqlite_last_error — データベースに関する直近のエラーコードを返す
  • sqlite_last_insert_rowid — 直近に挿入されたレコードのrowidを返す
  • sqlite_libencoding — リンクされているSQLiteライブラリのエンコーディングを返す
  • sqlite_libversion — リンクされているSQLiteライブラリのバージョンを返す
  • sqlite_next — 次のレコード番号へシークする
  • sqlite_num_fields — 結果セットのフィールド数を返す
  • sqlite_num_rows — 結果セットのレコード数を返す
  • sqlite_open — SQLiteデータベースをオープンする。データベースが存在しない場合は作 成する
  • sqlite_popen — SQLiteデータベースへの持続的ハンドルをオープンする。存在しない場合 には、データベースを作成する
  • sqlite_prev — 結果セットの前のレコード番号へシークする
  • sqlite_query — 指定したデータベースに対してクエリを実行し、結果ハンドル を返す
  • sqlite_rewind — 先頭レコード番号へシークする
  • sqlite_seek — 特定のレコード番号へシークする
  • sqlite_single_query — クエリを実行し、単一カラムもしくは先頭レコードの値に対する配列を返す
  • sqlite_udf_decode_binary — UDFにパラメータとして渡されたバイナリデータをデコードする
  • sqlite_udf_encode_binary — UDFから返す前にバイナリデータをエンコードする
  • sqlite_unbuffered_query — 事前取得していないクエリを実行し、全てのデータをバッファリングする
  • sqlite_valid — まだレコードが残っているかどうかを返す