sqlite_udf_decode_binary
(PHP 5 < 5.4.0, PECL sqlite >= 1.0.0)
sqlite_udf_decode_binary — Decode binary data passed as parameters to an UDF
Description
$data
)Decodes binary data passed as parameters to a UDF.
You must call this function on parameters passed to your UDF if you need them to handle binary data, as the binary encoding employed by PHP will obscure the content and of the parameter in its natural, non-coded form.
PHP does not perform this encode/decode operation automatically as it would severely impact performance if it did.
Parameters
-
data
-
The encoded data that will be decoded, data that was applied by either sqlite_udf_encode_binary() or sqlite_escape_string().
Return Values
The decoded string.
Examples
Example #1 binary-safe max_length aggregation function example
<?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'));
?>
See Also
- sqlite_udf_encode_binary() - Encode binary data before returning it from an UDF
- sqlite_create_function() - Registers a "regular" User Defined Function for use in SQL statements
- sqlite_create_aggregate() - Register an aggregating UDF for use in SQL statements
- 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 ;
}