Pdo\Sqlite::createFunction
SQL 文で使用するユーザー定義関数を登録する
説明
public bool Pdo\Sqlite::createFunction(
string $function_name
,
callable $callback
,
int $num_args
= -1,
int $flags
= 0
)
PHP 関数を、ユーザー定義関数として SQLite に登録します。
登録した関数は、SQL 文の中で使用することが可能です。
ユーザー定義関数は、関数をコールできるあらゆる SQL 文
(SELECT
、UPDATE
、トリガなど) から呼び出せます。
ヒント
このメソッドを使用してネイティブ SQL 関数を上書きすることができます。
パラメータ
-
function_name
-
SQL 文で使用する関数の名前。
-
callback
-
定義した SQL 関数を処理するコールバック関数。
注意:
この関数が返す値は、SQLite が理解できる形式 (すなわち
スカラー型)
でなければなりません。
コールバック関数の定義は次のとおりです:
mixed callback(mixed $value
, mixed ...$values
)
-
value
-
SQL関数に渡す最初の引数
-
values
-
SQL関数に渡す2つ目以降の引数
-
num_args
-
SQL 関数がとる引数の数。
このパラメータが
-1
の場合、
SQL 関数は任意の数の引数を取ることができます。
-
flags
-
ビット単位のフラグの組み合わせ。
現在は、
PDO::SQLITE_DETERMINISTIC
だけがサポートされています。
これは、単一のSQLステートメント内では、
同じ入力に対して常に同じ結果を返すことを指定します。
戻り値
成功した場合に true
を、失敗した場合に false
を返します。
例
例1 Pdo\Sqlite::createFunction の例
この例では、文字列の SHA256 ハッシュを計算し
それを反転する関数を使っています。SQL 文を実行すると、
この関数によって変換されたファイル名が
$rows に格納され返ります。
この手法の素晴らしい点は、クエリの後に
foreach ループを用いて結果を処理する必要がないことです。
<?php
function sha256_and_reverse($string)
{
return strrev(hash('sha256', $string));
}
$db = new Pdo\Sqlite('sqlite::sqlitedb');
$db->sqliteCreateFunction('sha256rev', 'sha256_and_reverse', 1);
$rows = $db->query('SELECT sha256rev(filename) FROM files')->fetchAll();
?>
参考
- Pdo\Sqlite::createAggregate
- Pdo\Sqlite::createCollation
- sqlite_create_function
- sqlite_create_aggregate