sqlite_create_function
SQLステートメントで使用するために"通常の"ユーザ定義関数を登録する
説明
boolsqlite_create_function
resourcedb
stringfunction_name
mixedcallback
intnum_args
sqlite_create_function により、SQLiteにPHP関数
をUDF (ユーザ定義関数)として登録することが可能で
す。この関数は、SQLステートメントの中からコールできます。
dbには拡張したいデータベースハンドルを指定、
function_name は、SQLステートメントで使用す
る関数の名前を指定、callbackはSQL関数を処理
するためにコールされるPHP関数を指定する有効なPHPコールバック関数で
す。オプションのパラメータnum_argsは、
SQLiteの式パーサ/評価器によりヒント情報として使用されます。この値は、
使用する関数が一定の数のパラメータのみを指定可能で、特定の値を指定
する場合に推奨されます。
UDFは、SELECTおよびUPDATEステートメント、そして、トリガーの中のよう
に関数をコールできる全てのSQLステートメントで使用可能です。
sqlite_create_functionの例
]]>
この例では、文字列のMD5サムを計算し、順番を反転する関数が記述されています。
このSQLステートメントが実行された場合、関数により変換されたファイル
名の値を返します。
$rows により返されるデータには、処理結果が含
まれています。
この技術の美しいところは、データのクエリーを実行した後で、
foreach() ループにより結果を処理する必要がないことです。
PHP は、データベースが最初にオープンされる際に
phpという名前の特別な関数を登録します。
このphp関数は、事前に登録することなしにあらゆるPHP関数をコールする
ために使用可能です。
PHP関数の使用例
]]>
この例は、データベースの各 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も参照してください。