Criptografar campo senha PHP

Necessito usar a criptografia md5 no campo senha. e enviar criptografado para o banco de dados. porém quando eu tento criptografar na linha do $statement->bindValue(3, $cli->senha); fazendo $statement->bindValue(3, md5($cli->senha)); não funciona e retorna 0.

como poderia fazer essa camada de segurança ?
segue o código da classe DAO.

<?php
require_once 'persistence/conexaoBanco.class.php';

class ClienteDAO{

   private $conexao = null;

  public function __construct(){
     $this->conexao = ConexaoBanco::getInstance();
  }

  public function __destruct(){}

  public function cadastrarCliente($cli){

      try {

        $statement = $this->conexao->prepare(
          "insert into clientes(id,email,cpf,senha)
           VALUES(null,?,?,?)");

        $statement->bindValue(1, $cli->email);
        $statement->bindValue(2, $cli->cpf);
        $statement->bindValue(3, $cli->senha);

        $statement->execute();

      } catch (PDOException $e) {
        echo "Erro ao Cadastrar Clientes!" .$e;
      }
   }
}

Não funciona é muito vago. Dá alguma exceção? O cliente é cadastrado mas com 0 no campo senha? Ou nem um nem outro?

Experimente ver primeiro se a função md5 está operando, antes de tentar gravar no banco. Algo como:

$senha_md5 = md5($cli->senha);
var_dump($senha_md5);
$statement->bindValue(3, $senha_md5);

Veja no retorno da requisição o que o var_dump está exibindo.

Se não estiver exibindo nada (ou zero), tente colocar uma string qualquer para teste, em vez do que foi digitado pelo usuário. Algo como:

$senha_md5 = md5('12345678');
var_dump($senha_md5);
$statement->bindValue(3, $senha_md5);

Por fim, 2 observações:

  • não sei se esse é um projeto real, mas atualmente não é muito recomendado usar md5 para criptografar senhas. Há opções melhores;
  • se seu campo id é auto_increment (MySQL), você não precisa inclui-lo no insert, nem passar null nos parâmetros. Ficaria assim: insert into clientes(email,cpf,senha) VALUES(?,?,?). Ajuste os parâmetros de acordo.

Abraço.

@TerraSkilll fiz oque você falou, está retornando zero.

image

O campo de senha é um varchar? Tem o tamanho certo? Um md5 precisa de 32 caracteres, um hash melhor (fortemente indicado, como falou o @TerraSkilll) vai ocupar mais.
Não dá nenhum erro?

E o que saiu no var_dump, que te recomendei ver?

Abraço.

o meu campo senha no Banco era int. dai por isso que não entrava os dados.