略微加速

PHP官方手册 - 互联网笔记

PHP - Manual: sqlite_udf_decode_binary

2024-12-23

sqlite_udf_decode_binary

(PHP 5 < 5.4.0, PECL sqlite >= 1.0.0)

sqlite_udf_decode_binaryDecode binary data passed as parameters to an UDF

说明

sqlite_udf_decode_binary ( string $data ) : string

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.

参数

data

The encoded data that will be decoded, data that was applied by either sqlite_udf_encode_binary() or sqlite_escape_string().

返回值

The decoded string.

范例

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'));

?>

参见

add a note add a note

User Contributed Notes 1 note

up
1
BenWa
11 months ago
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 ;
    }

官方地址:https://www.php.net/manual/en/function.sqlite-udf-decode-binary.php

北京半月雨文化科技有限公司.版权所有 京ICP备12026184号-3