php – Função para inserir registro com PDO – Não aponta erros, no entanto não grava nada na tabela

Estou tentando criar uma função para simplificar a inserção de registros no MySQL utilizando PDO.
Porém a função não aponta erros de conexão, nem erros na inserção, mas ao olhar a tabela uma nova linha foi inserida, só que todos os campos estão vazios.

Na tabela, todos os campos foram definidos com o valor padrão NULL.

Segue o script PHP:

<?php

function inserir($tabela,$lista_campos){
    $host = 'localhost';
    $user = 'root';
    $password = '';
    $database = 'banco_de_dados';

    try {
        $conexao = new PDO("mysql:host=$host;dbname=$database;charset=utf8", $user, $password);

    } catch (PDOException $e) {
        exit("Erro conectar: " . $e->getMessage());
    }


    $campos=();
    $valores=();

    // LOOP PERCORER DICIONARIO =======================================================================
    foreach($lista_campos as $campo => $valor){
        //echo "$campo - $valor";
        
        $campos()=$campo;
        $valores()=":".$valor;
        
    }
    // CONVERTE ARRAY PARA STRING =========================================================================
    $campos=implode(",",$campos);
    print_r($campos);

    echo "<br>";

    $valores=implode(",",$valores);
    print_r($valores);

    echo "<br>";

    $query = $conexao->prepare("INSERT INTO $tabela ($campos) VALUES ($campos)");
    echo "conexao->prepare(INSERT INTO $tabela ($campos) VALUES ($campos) )";
    echo "<br>";

    // LOOP PAR O bindParam ==============================================================================
    foreach($lista_campos as $campo => $valor){
        $query->bindParam($campo, $valor, PDO::PARAM_STR);
        echo "query->bindParam($campo, $valor, PDO::PARAM_STR)";
        echo "<br>";
       
    }

     
    try {
        $result = $query->execute();
        //var_dump($result);

        if ($result) {
            echo '<p >registrado</p>';
        } else {
            echo '<p >erro ao registrar</p>';
        }
        

    } catch (PDOException $e) {
        exit("Error: " . $e->getMessage() );
    }
        
}




$valor=array("identificador" => "iden",
        "nome_original" => "no",
        "tamanho" => "tm",
        "extencao" => "ext",
        "arquivo" => "ar",
        "data_envio" => "de",
        "entidade" => "pf");

inserir($tabela="documentos",$lista_campos=$valor);

?>

inserir a descrição da imagem aqui

Ao chamar a função, ele grava a linha, só que sem os valores que foram passados.

Todos ficam nulos, pois são os valores padrão de cada campo.

inserir a descrição da imagem aqui