PDO::sqliteCreateCollation

SQL文で collate 関数として使うユーザー定義関数を登録する

説明

public bool PDO::sqliteCreateCollation(string $name, callable $callback)
警告

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

パラメータ

name

作成または再定義する SQL collate 関数の名前

callback

collation の振る舞いを定義する、PHP関数または、 コールバックとして適用するユーザー定義関数。 2つの値を受けとり、strcmp 関数が返すのと同じ値を返します。つまり、 はじめの文字列が前の文字列より前にソートされる場合に-1、 後にソートされる場合に1、等しい場合に0を返します。

この関数は、次のように定義する必要があります:

int collation(string $string1, string $string2)

戻り値

成功した場合に true を、失敗した場合に false を返します。

例1 PDO::sqliteCreateCollation の例

<?php
$db = new PDO('sqlite::memory:');
$db->exec("CREATE TABLE test (col1 string)");
$db->exec("INSERT INTO test VALUES ('a1')");
$db->exec("INSERT INTO test VALUES ('a10')");
$db->exec("INSERT INTO test VALUES ('a2')");

$db->sqliteCreateCollation('NATURAL_CMP', 'strnatcmp');
foreach ($db->query("SELECT col1 FROM test ORDER BY col1") as $row) {
  echo $row['col1'] . "\n";
}
echo "\n";
foreach ($db->query("SELECT col1 FROM test ORDER BY col1 COLLATE NATURAL_CMP") as $row) {
  echo $row['col1'] . "\n";
}
?>

上の例の出力は以下となります。

a1
a10
a2

a1
a2
a10