©
This document uses PHP Chinese website manual Release
(PHP 5 >= 5.3.0)
实现与 SQLite 3 数据库对接的类。
$msecs
)$filename
[, int $flags
[, string $encryption_key
]] )$name
, mixed $step_callback
, mixed $final_callback
[, int $argument_count
= -1
] )$name
, callable $callback
)$name
, mixed $callback
[, int $argument_count
= -1
] )$value
)$query
)$shared_library
)$filename
[, int $flags
= SQLITE3_OPEN_READWRITE | SQLITE3_OPEN_CREATE
[, string $encryption_key
]] )$query
)$query
)$query
[, bool $entire_row
= false
] )[#1] Anonymous [2013-09-05 04:06:32]
There is an undocumented method "createCollation" in this class, as reported on https://bugs.php.net/bug.php?id=65216
The syntax of the method is similar to usort for example:
createCollation(collation_name, callback)
The callback function must return an integer less than, equal to, or greater than zero if the first argument is considered to be respectively less than, equal to, or greater than the second.
Here is one example of use to collate unicode text as ASCII, so that for example in french ?milie will be ordered just after Emile and not after Zebra like it's the case with the default BINARY collation. This requires the "intl" module to be installed, see PHP doc for details (or apt-get install php5-intl in deb based distros).
<?php
$db = new SQLite3(':memory:');
$db->createCollation('translit_ascii', function ($a, $b) {
$a = transliterator_transliterate('Any-Latin; Latin-ASCII; Lower()', $a);
$b = transliterator_transliterate('Any-Latin; Latin-ASCII; Lower()', $b);
return strcmp($a, $b);
});
$db->exec('
CREATE TABLE people (name COLLATE translit_ascii);
INSERT INTO people VALUES ("?milie");
INSERT INTO people VALUES ("Zebra");
INSERT INTO people VALUES ("Emile");
INSERT INTO people VALUES ("Arthur");
');
$stmt = $db->prepare('SELECT name FROM people ORDER BY name;');
$result = $stmt->execute();
while ($row = $result->fetchArray())
{
echo $row['name'] . PHP_EOL;
}
// Displays:
// Arthur
// Emile
// ?milie
// Zebra
?>