sqlite_udf_decode_binary
(PHP 5, PECL sqlite:1.0-1.0.3)
sqlite_udf_decode_binary — Декодирует бинарные данные, переданные в пользовательскую функцию
Описание
sqlite_udf_decode_binary() декодирует бинарные данные, закодированные функциями sqlite_udf_encode_binary() или sqlite_escape_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(), sqlite_create_function() and sqlite_create_aggregate().
- 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 ;
}