Como cadastrar imagem no banco de dados

Olá pessoal, estou tentando criar um sistema no modelo MVC, e não consigo fazer o upload e a inserção da imagem no campo IMAGEM do meu banco de dados.

Minha estrutura de Pastas está assim:
MyBlog
App
Controllers
Models
Views

    Public
        img
        css
        js

 No formulario de cadastro coloquei o campo que chama o arquivo de imagem e inclui o enctype/multpartp normalmente. 
 Meu metodo cadastrar está dentro do arquivo usuarios.php que está na pasta Controllers. Vejam : 
   public function cadastrar()
{
    //recebe os dados do formulario e os filtra
    $formulario = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);
    if (isset($formulario)) :
        $dados = [
            'nome' => trim($formulario['nome']),
            'imagem' => trim($formulario['imagem']),
            'email' => trim($formulario['email']),
            'senha' => trim($formulario['senha']),
            'confirma_senha' => trim($formulario['confirma_senha']),
        ];
        //checa campos em brancos
        if (in_array("", $formulario)) :

            if (empty($formulario['nome'])) :
                $dados['nome_erro'] = 'Preencha o campo nome';
            endif;

            if (empty($formulario['imagem'])) :
                $dados['imagem_erro'] = 'Faça o Upload de uma imagem';
            endif;

            if (empty($formulario['email'])) :
                $dados['email_erro'] = 'Preencha o campo e-mail';
            endif;

            if (empty($formulario['senha'])) :
                $dados['senha_erro'] = 'Preencha o campo senha';
            endif;

            if (empty($formulario['confirma_senha'])) :
                $dados['confirma_senha_erro'] = 'Confirme a Senha';
            endif;
        else :
            //checa se o nome tem um formato valido
            if (Checa::checarNome($formulario['nome'])) :
                $dados['nome_erro'] = 'O nome informado é invalido';
                //checa se o e-mail tem um formato valido
                
            elseif (Checa::checarEmail($formulario['email'])) :
                $dados['email_erro'] = 'O e-mail informado é invalido';
                //checa se o e-mail existe no banco de dados
            elseif ($this->usuarioModel->checarEmail($formulario['email'])) :
                $dados['email_erro'] = 'O e-mail informado já está cadastrado';
                //checa se a senha tem menos de 6 caracteres
            elseif (strlen($formulario['senha']) < 6) :
                $dados['senha_erro'] = 'A senha deve ter no minimo 6 caracteres';
                //checa se a senha é igual a confirmação de senha
            elseif ($formulario['senha'] != $formulario['confirma_senha']) :
                $dados['confirma_senha_erro'] = 'As senhas são diferentes';
            else :
                /* 
                Codifica a senha
                password_hash() cria um novo password hash usando um algoritmo forte de hash de via única. PASSWORD_DEFAULT - Usa o algoritmo bcrypt (padrão desde o PHP 5.5.0).
                 */
                $dados['senha'] = password_hash($formulario['senha'], PASSWORD_DEFAULT);
                //chama o metodo armazenar do model para cadastrar os dados no banco de dados
                if ($this->usuarioModel->armazenar($dados)) :
                    Sessao::mensagem('usuario', 'Cadastro realizado com sucesso');
                    Url::redirecionar('usuarios/login');
                else :
                    die("Erro ao armazenar usuario no banco de dados");
                endif;
            endif;
        endif;
    else :
        //define os dados padrão da view
        $dados = [
            'nome' => '',
            'imagem' => '',
            'email' => '',
            'senha' => '',
            'confirma_senha' => '',
            'nome_erro' => '',
            'imagem_erro' => '',
            'email_erro' => '',
            'senha_erro' => '',
            'confirma_senha_erro' => ''
        ];
    endif;
//define a view de cadastro de usuarios
    $this->view('usuarios/cadastrar', $dados);
}

Minha função armazenar está no arquivo Usuario da pasta Models e é assim:
public function armazenar($dados)
{
$this->db->query(“INSERT INTO usuarios(nome, imagem, email, senha) VALUES (:nome, :imagem, :email, :senha)”);

    $this->db->bind("nome", $dados['nome']);
    $this->db->bind("imagem", $dados['imagem']);
    $this->db->bind("email", $dados['email']);
    $this->db->bind("senha", $dados['senha']);

    if ($this->db->executa()) :
        return true;
    else :
        return false;
    endif;
}

Vi um exemplo na Net onde se usa o seguinte código primeiro fazer o upload do arquivo para uma pasta temporaria e depois transferi-lo para o diretório imagens. Ocorre que o exemplo não está no padrao MVC, não tem um model. Assim sendo, não sei onde colocar esse código, se no Controlador de usuario ou no Model usuario. Tentei aqui e deu erro… Vejam o codigo:

$dir = “imagens/”;
$file = $_FILES[“imagem”[;
$Destino = “dir/” .$file[“name”];
if(move_uploaded_file($file[“temp_name”], $destino)):
echo “Arquivo transferido com sucesso”;
else:
echo “Nao foi possivel transferir o Arquivo”;
endif

Outra duvida que tenho é que na minha função armazenar, na Query eu faço assim:

$this->db->query(“INSERT INTO usuarios(nome, imagem, email, senha) VALUES (:nome, :imagem, :email, :senha)”);

    $this->db->bind("nome", $dados['nome']);
    $this->db->bind("imagem", $dados['imagem']);
    $this->db->bind("email", $dados['email']);
    $this->db->bind("senha", $dados['senha']);

    if ($this->db->executa()) :

        return true;
     else :
            return false;
     endif;
}

Vejam que estou pegando os parametros da minha variavel $dados que está no meu controlador Usuarios:

$formulario = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);

    if (isset($formulario)) :

        $dados = [
                 'nome' => trim($formulario['nome']), 
                  'imagem' => trim($formulario['imagem']),
                  'email' => trim($formulario['email']), 
                  'senha' => trim($formulario['senha']),
                  'confirma_senha' => trim($formulario['confirma_senha']),

        ];

No caso do exemplo, a query esta assim:
$this->db->query("INSERT INTO usuarios(nome, imagem, email, senha) VALUES (?,?,?,?);

    $stmt->bindParam(1, $nome);
    $stmt->bindParam(2, $imagem); 
    $stmt->bindParam(3, $email);
    $stmt->bindParam(4, senha');

     ($tmt ->executa()) 

     bem, minha duvida é onde colocar a instrução para transferencia do arquivo e como definir que vá para o meu diretorio public/img e como devo adequar a minha Query ao exemplo dele, já que a minha Query está Model Usuarios e a variavel $Dados é uma array que recebe os dados nome, imagem, email e senha, enquanto no exemplo as variaveis que estao armazenando os parametros para a inserção no DB, a instruçao que transfere o arquivo para pasta e a query estao todos no mesmo arquivo?  

Como posso resolver isso ?

O correto seria você fazer o upload do arquivo(qualquer) via FTP para seu servidor e guardar o caminho da imagem na tabela no banco de dados

@jcvilanova, concordo com o que @JoaoToga1 disse.