PDO::sqliteCreateFunction

(PHP 5 >= 5.1.0, PHP 7, PECL pdo_sqlite >= 1.0.0)

PDO::sqliteCreateFunction SQL 文で使用するユーザー定義関数 (UDF) を登録する

説明

public bool PDO::sqliteCreateFunction ( string $function_name , callable $callback [, int $num_args = -1 [, int $flags = 0 ]] )
警告

この関数は、 実験的 なものです。この関数の動作・ 名前・その他ドキュメントに書かれている事項は、予告なく、将来的な PHP のリリースにおいて変更される可能性があります。 この関数は自己責任で使用してください。

このメソッドを使用すると、 PHP の関数を、UDF (User Defined Function: ユーザー定義関数) として SQLite に登録できるようになります。 登録した関数は、SQL 文の中で使用することが可能です。

UDF は、関数をコールできるあらゆる SQL 文 (SELECT および UPDATE 文、そしてトリガなど) で使用することが可能です。

パラメータ

function_name

SQL 文で使用する関数の名前。

callback

定義した SQL 関数を処理するコールバック関数。

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

num_args

The number of arguments that the SQL function takes. If this parameter is -1, then the SQL function may take any number of arguments.

flags

A bitwise conjunction of flags. Currently, only PDO::SQLITE_DETERMINISTIC is supported, which specifies that the function always returns the same result given the same inputs within a single SQL statement.

返り値

成功した場合に TRUE を、失敗した場合に FALSE を返します。

変更履歴

バージョン 説明
PHP 7.1.4 flags が追加されました。

例1 PDO::sqliteCreateFunction() の例

<?php
function md5_and_reverse($string
{
    return 
strrev(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 関数を上書きすることができます。

注意:

このメソッドは、SQLite2 ドライバでは使用できません。 代わりに、古い形式の sqlite API を使用してください。

参考

add a note add a note

User Contributed Notes 1 note

up
0
RoboTamer
5 years ago
groups looks like this '1,2,3,999'

<?php
/**
* int strpos ( string $haystack , mixed $needle [, int $offset = 0 ] )
*/
$dbUser = new PDO('sqlite:'.ROOT.'/var/db/users.db3');
$dbUser->sqliteCreateFunction('strpos', 'strpos', 2);
$sql = 'SELECT username FROM users WHERE strpos(groups,",2,");';
$rows = $dbUser->query($sql)->fetchAll(PDO::FETCH_ASSOC);
print_r($rows);

?>
To Top