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

# sqlite_create_function

(PHP 5)

sqlite_create_function -- SQLステートメントで使用するために"通常の"ユーザ定義関数を登録する

## 説明

bool sqlite_create_function ( resource db, string function_name, mixed callback [, int num_args])

sqlite_create_function() により、SQLiteにPHP関数 をUDF (ユーザ定義関数)として登録することが可能で す。この関数は、SQLステートメントの中からコールできます。

`db`には拡張したいデータベースハンドルを指定、 `function_name` は、SQLステートメントで使用す る関数の名前を指定、`callback`はSQL関数を処理 するためにコールされるPHP関数を指定する有効なPHPコールバック関数で す。オプションのパラメータ`num_args`は、 SQLiteの式パーサ/評価器によりヒント情報として使用されます。この値は、 使用する関数が一定の数のパラメータのみを指定可能で、特定の値を指定 する場合に推奨されます。

UDFは、SELECTおよびUPDATEステートメント、そして、トリガーの中のよう に関数をコールできる全てのSQLステートメントで使用可能です。

例 1. sqlite_create_function()の例

`<?php function md5_and_reverse($string) { return strrev(md5($string)); } sqlite_create_function($db, 'md5rev', 'md5_and_reverse', 1); $rows = sqlite_array_query($db, 'SELECT md5rev(filename) from files'); ?>`

この例では、文字列のMD5サムを計算し、順番を反転する関数が記述されています。 このSQLステートメントが実行された場合、関数により変換されたファイル 名の値を返します。 `$rows` により返されるデータには、処理結果が含 まれています。

この技術の美しいところは、データのクエリーを実行した後で、 foreach() ループにより結果を処理する必要がないことです。

PHP は、データベースが最初にオープンされる際に `php`という名前の特別な関数を登録します。 このphp関数は、事前に登録することなしにあらゆるPHP関数をコールする ために使用可能です。

例 2. PHP関数の使用例

`<?php $rows = sqlite_array_query($db, "SELECT php('md5', filename) from files"); ?>`

この例は、データベースの各 `filename` カラムにつ いて md5() をコールし、その結果を `$rows`に返します。

> 注意: 性能上の理由から、PHPはUDFとの間で送受信されるバイナリデータを自動 的にエンコード/デコードしません。この方法でバイナリデータを処理す る必要がある場合、パラメータを手動でエンコード/デコードし、 値を返すようにする必要があります。 詳細については、sqlite_udf_encode_binary() およびsqlite_udf_decode_binary()を参照して下さ い。

> ティップ: 適用するアプリケーションの主要な要求が高い性能でない限り、バイナリ データの処理を行うためにUDFを使用することは推奨されません。

> ティップ: SQLiteのネーティブSQL関数をオーバーライドするために sqlite_create_function()および sqlite_create_aggregate()も使用可能です。

sqlite_create_aggregate()も参照して下さい。

前のページ | ホーム | 次のページ
sqlite_create_aggregate | 上に戻る | sqlite_current