sqlite_udf_decode_binary
(PHP 5 < 5.4.0, PECL sqlite >= 1.0.0)
sqlite_udf_decode_binary — Декодирует бинарные данные, переданные в качестве параметров в UDF
Описание
$data
)Декодирует бинарные данные, переданные в качестве параметров в UDF.
Эту функцию следует применять к аргументам, переданным в UDF, если в этих аргументах могут содержаться бинарные данные.
PHP не осуществляет данные операции кодирования и декодирования автоматически, так как это негативно сказывается на производительности.
Список параметров
-
data
-
Закодированные данные, которые будут раскодированы. Кодирование должно было быть осуществлено с помощью функций sqlite_udf_encode_binary() или sqlite_escape_string().
Возвращаемые значения
The decoded string.
Примеры
Пример #1 Пример реализации агрегирующей функции max_length, способной работать с бинарными данными
<?php
$data = array(
'one',
'two',
'three',
'four',
'five',
'six',
'seven',
'eight',
'nine',
'ten',
);
$db = sqlite_open(':memory:');
sqlite_query($db, "CREATE TABLE strings(a)");
foreach ($data as $str) {
$str = sqlite_escape_string($str);
sqlite_query($db, "INSERT INTO strings VALUES ('$str')");
}
function max_len_step(&$context, $string)
{
$string = sqlite_udf_decode_binary($string);
if (strlen($string) > $context) {
$context = strlen($string);
}
}
function max_len_finalize(&$context)
{
return $context;
}
sqlite_create_aggregate($db, 'max_len', 'max_len_step', 'max_len_finalize');
var_dump(sqlite_array_query($db, 'SELECT max_len(a) from strings'));
?>
Смотрите также
- sqlite_udf_encode_binary() - Кодирует бинарные данные перед тем как вернуть их из UDF
- sqlite_create_function() - Регистрирует "стандартную" функцию (UDF) для использования в SQL-запросах
- sqlite_create_aggregate() - Регистрирует агрегирующую функцию для использования в SQL-запросах
- PHP Руководство
- Функции по категориям
- Индекс функций
- Справочник функций
- Расширения для работы с базами данных
- Расширения для работы с базами данных отдельных производителей
- SQLite
- sqlite_array_query
- sqlite_busy_timeout
- sqlite_changes
- sqlite_close
- sqlite_column
- sqlite_create_aggregate
- sqlite_create_function
- sqlite_current
- sqlite_error_string
- sqlite_escape_string
- sqlite_exec
- sqlite_factory
- sqlite_fetch_all
- sqlite_fetch_array
- sqlite_fetch_column_types
- sqlite_fetch_object
- sqlite_fetch_single
- sqlite_fetch_string
- sqlite_field_name
- sqlite_has_more
- sqlite_has_prev
- sqlite_key
- sqlite_last_error
- sqlite_last_insert_rowid
- sqlite_libencoding
- sqlite_libversion
- sqlite_next
- sqlite_num_fields
- sqlite_num_rows
- sqlite_open
- sqlite_popen
- sqlite_prev
- sqlite_query
- sqlite_rewind
- sqlite_seek
- sqlite_single_query
- sqlite_udf_decode_binary
- sqlite_udf_encode_binary
- sqlite_unbuffered_query
- sqlite_valid
Коментарии
I had to migrate an existing SQLITE2 db with UDF encoded fields. SQLITE3 does not support sqlite_udf_decode_binary. So I wrote a replacement for the migration.
function sqlite_udf_decode_binary($in){
if ( substr($in,0,1)==chr(1) ) {
$n=strlen($in);
$e=ord(substr($in,1,1));
$i=2 ;
while($i<$n){
$x = ord(substr($in,$i,1)) ;
if ($x==1) {
$i++;
$x = ord(substr($in,$i,1)) - 1 ;
}
$out .= chr($x+$e) ;
$i++;
}
} else {
$out = $in ;
}
return $out ;
}