error when passing blob variable using bind_param

0

Good afternoon class, I have a system for creating feeds, which is possible to use image, which is configured in the base as longblob.

When I pass the direct variable to the query it works perfectly, but when I pass it through bind_param it gives the error.

The error: It does not insert correctly into the base, it appears as a blob file in phpmyadmin but when displaying the image it gets broken.

I'm showing like this:

echo '<img src="data:'.$feed[0]['fd_imagem_type'].';base64,'.base64_encode( $feed[0]['fd_imagem'] ).'" height="120" class="imgleft1"/>';

functions for insertion:

function type($args = [], $bind = false){
    # Essa função retorna o codigo para o valor 
    # Se o $bind for igual a true, ela vai retornar os simbolos
    $type = $binds = "";    
    $i = 1;
    foreach($args as $valor){
        switch(gettype($valor)){
            case 'integer':
                $type .= 'i';
                break;
            case 'double':
                $type .= 'd';
                break;
            case 'string':
                if (array_search($valor, $args) == 'fd_imagem') {
                    $type .= 'b';
                } else {
                    $type .= 's';
                }
                break;
            default:
                $type .= 's';
                break;  
        }   
        $binds .= "?";
        if($i < count($args)){
            $binds .= ", ";     
        }
        $i++;
    }
    if($bind){
        return $binds;  
    }
    return $type;
}

function parametros($args=[], $sec=false){
    # Essa função retorna os parametros já referenciados
    # Se a variavel $sec for igual a true, ela vai retornar  os campos separados por vírgulas   
    $type = type($args);    
    $parametro[] = &$type;
    foreach($args as $key=>$valor){
        $parametro[] =& $args[$key];    
    }   
    if($sec){
        $campos = implode(', ', array_keys($args)); 
        return $campos; 
    }
    return $parametro;
}

function insert($mysqli,$tabela, $args = []){

    $campos = parametros($args, true); # aqui passo os nomes dos campos da tabela
    $binds = type($args, true); # aqui passo os simbolos (?) para a consulta

    $sql = "INSERT INTO {$tabela} ({$campos}) VALUES ({$binds})";

    if($prepare = $mysqli->prepare($sql)){
        if(call_user_func_array(array($prepare, "bind_param"), parametros($args))){
            if($prepare->execute()){
                return true; 
            }
        } else {
            return $mysqli->error;
        }
    } else {
        return $mysqli->error;    
    }
}

Here's the insert:

// verifica se foi enviada alguma imagem
    if($_FILES['fd_imagem']['name']!=''){
        $_POST['fd_imagem'] = addslashes(file_get_contents($_FILES['fd_imagem']['tmp_name']));
        $_POST['fd_imagem_type'] = $_FILES['fd_imagem']['type'];
    }else{
        $_POST['fd_imagem'] = '';
        $_POST['fd_imagem_type'] = '';
    }    
    $result = insert($mysqli,'tabela',$_POST);

PS. the functions I took from Laura's example link: How do I pass dynamic parameters in a preparedStatment?

    
asked by anonymous 14.03.2017 / 20:44

0 answers