note 113143 added to class.sqlite3
| From: | Anonymous | Date: | Thu, 05 Sep 2013 04:06:35 +0000 |
| Subject: | note 113143 added to class.sqlite3 | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-196168@lists.php.net to get a copy of this message | ||
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
?>
----
Server IP: 113.20.13.217
Probable Submitter: 220.237.28.194
----
Manual Page -- http://php.net/manual/en/class.sqlite3.php
Edit -- https://master.php.net/note/edit/113143
Del: integrated -- https://master.php.net/note/delete/113143/integrated
Del: useless -- https://master.php.net/note/delete/113143/useless
Del: bad code -- https://master.php.net/note/delete/113143/bad+code
Del: spam -- https://master.php.net/note/delete/113143/spam
Del: non-english -- https://master.php.net/note/delete/113143/non-english
Del: in docs -- https://master.php.net/note/delete/113143/in+docs
Del: other reasons-- https://master.php.net/note/delete/113143
Reject -- https://master.php.net/note/reject/113143
Search -- https://master.php.net/manage/user-notes.php