(PHP 5 >= 5.1.0, PHP 7, PHP 8, PECL pdo_sqlite >= 1.0.0)
PDO::sqliteCreateFunction — SQL 文で使用するユーザー定義関数 (UDF) を登録する
$function_name
,$callback
,$num_args
= -1,$flags
= 0この関数は、 実験的 なものです。この関数の動作・ 名前・その他ドキュメントに書かれている事項は、予告なく、将来的な PHP のリリースにおいて変更される可能性があります。 この関数は自己責任で使用してください。
このメソッドを使用すると、 PHP の関数を、UDF (User Defined Function: ユーザー定義関数) として SQLite に登録できるようになります。 登録した関数は、SQL 文の中で使用することが可能です。
UDF は、関数をコールできるあらゆる SQL 文 (SELECT および UPDATE 文、そしてトリガなど) で使用することが可能です。
function_name
SQL 文で使用する関数の名前。
callback
定義した SQL 関数を処理するコールバック関数。
注意: コールバック関数の返す値は、SQLite が理解できる形式 (すなわち スカラー型) でなければなりません。
コールバック関数は、以下のように定義する必要があります:
value
SQL関数に渡す最初の引数
values
SQL関数に渡す2つ目以降の引数
num_args
SQL 関数がとる引数の数。
このパラメータが -1
の場合、
SQL 関数は任意の数の引数を取ることができます。
flags
ビット単位のフラグの組み合わせ。
現状は、PDO::SQLITE_DETERMINISTIC
だけがサポートされています。
これは、単一のSQLステートメント内では、同じ入力に対して常に同じ結果を返すことを指定します。
バージョン | 説明 |
---|---|
7.1.4 |
flags パラメータが追加されました。
|
例1 PDO::sqliteCreateFunction() の例
<?php
function md5_and_reverse($string)
{
return strrev(hash('md5', $string));
}
$db = new PDO('sqlite:sqlitedb');
$db->sqliteCreateFunction('md5rev', 'md5_and_reverse', 1);
$rows = $db->query('SELECT md5rev(filename) FROM files')->fetchAll();
?>
この例では、文字列の md5 を計算してそれを反転させる関数を定義しています。
SQL 文が実行されると、filename をこの関数で変換した値が返されます。
$rows
に返されるデータの中に、処理結果が含まれます。
この方法を使用すると、データを取得した後に foreach で結果をひとつひとつ処理していく必要がなくなり、美しいコードが記述できます。
PDO::sqliteCreateFunction および PDO::sqliteCreateAggregate を使用して、 SQLite のネイティブ SQL 関数を上書きすることができます。