SQL 文で使用するユーザー定義関数を登録する

# Pdo\Sqlite::createFunction

(PHP 8 >= 8.4.0)

Pdo\Sqlite::createFunction — SQL 文で使用するユーザー定義関数を登録する

### 説明

public function Pdo\Sqlite::createFunction(
string `$function_name`,
callable `$callback`,
int `$num_args` = -1,
int `$flags` = 0
): bool

PHP 関数を、ユーザー定義関数として SQLite に登録します。 登録した関数は、SQL 文の中で使用することが可能です。 ユーザー定義関数は、関数をコールできるあらゆる SQL 文 (`SELECT`、`UPDATE` 、トリガなど) から呼び出せます。

ヒント

このメソッドを使用してネイティブ SQL 関数を上書きすることができます。

### パラメータ

`function_name`
  SQL 文で使用する関数の名前。
`callback`
  定義した SQL 関数を処理するコールバック関数。

  > 注意: この関数が返す値は、SQLite が理解できる形式 (すなわち スカラー型) でなければなりません。

  コールバック関数の定義は次のとおりです:

  function callback(mixed `$value`, mixed `...$values`): mixed
  `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->createFunction('sha256rev', 'sha256_and_reverse', 1);
    $rows = $db->query('SELECT sha256rev(filename) FROM files')->fetchAll();
    ?>

### 参考

- Pdo\Sqlite::createAggregate() - SQL 文で使用するユーザー定義集約関数を登録する
- Pdo\Sqlite::createCollation() - SQL文で文字列比較関数として使うユーザー定義関数を登録する
- sqlite_create_function()
- sqlite_create_aggregate()

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open