CLIV. 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 も 有効にしておく必要があります。
Linux あるいは Unix オペレーティングシステムでは、 もし PDO を共有モジュールとしてビルドしたのなら SQLite も共有モジュールとしてビルドする必要があります。 そのためには、設定オプション --with-sqlite=shared を指定します。SQLite 3 は、 PDO SQLite でサポートされます。
権限を持たないアカウントに対する Windows 版のインストール: Windows オペレーティングシステムでは、権限のないアカウントは デフォルトで設定される
もしサーバレベルでこの設定を行うことができないのであれば、 スクリプト内で設定することができます。 この設定は Web サーバがファイルを生成した後で書き込んだり削除したりする 権限を持たせるディレクトリを指定する必要があります。 そうでない場合、次のようなエラーメッセージを受け取るでしょう。 malformed database schema - unable to open a temporary database file for storing temporary tablesTMP環境変数を利用できません。 これにより SQLite は Windows ディレクトリにテンポラリファイルを作成しますが、 望まれるものではありません。 そのため Web サーバもしくは Web サーバが動作しているユーザーアカウントに対してTMP環境変数を設定すべきです。 もし、Apache を使用しているなら、 httpd.conf ファイル内で SetEnv ディレクティブを使用することで実現可能です。 例えば、次のような感じです。
要件
以下の関数を利用可能とするには、SQLiteサポートを有効にしてPHPをコ ンパイルするか、php.iniで動的にSQLite拡張モジュールをロードする必 要があります。
リソース型
SQLiteインターフェイスでは2種類のリソースが使用されています。最初 のリソースはデータベース接続で、2番目は結果セットです。
定義済の定数
関数 sqlite_fetch_array() と sqlite_current() は、結果配列の種別を表すために定 数を使用します。以下の定数が定義されています。
SQLite 結果型定数
関数の戻り値はステータスコードです。以下の定数が定義されています。
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 データベースを表す
メソッド
-
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 の設定により動作が変化します。
PHP_INI_* 定数の詳細および定義については 付録G を参照してください。
以下に設定ディレクティブに関する 簡単な説明を示します。
-
sqlite.assoc_caseint -
ハッシュのインデックスに大文字小文字混用( 0 )、 大文字( 1 )、小文字 ( 2 )のど れを使用するかを指定します。
このオプションは、データベーススキーマ中での実際のフィールド名の ケースによらず、カラム名が常に大文字または小文字で返されるような 他のデータベースシステムとの互換性が必要な場合に特に有用です。
SQLiteライブラリは、カラム名をそのままのケース(これは、 スキーマで使用したケースに一致します)で返します。
sqlite.assoc_caseに 0 を指定した場合、そのままのケースは保持されます。このオプションを 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 -- まだレコードが残っているかどうかを返す