Veja este exemplo do meu código, considerando que os valores dos atributos estão vindo pelo formulário $_POST devidamente filtrados.
$usuario = filter_input(INPUT_POST , 'usuario', FILTER_SANITIZE_STRING);
$senha= filter_input(INPUT_POST , 'senha', FILTER_SANITIZE_STRING);
$e = new Usuario();
$e->setUsuario($usuario);
$e->setSenha($senha);
$stmt = $pdo->prepare(
'SELECT * FROM usuarios WHERE usuario = :usuario LIMIT 1'
);
$stmt->bindValue(':usuario', $e->getUsuario());
$stmt->execute();
try {
if ($stmt->rowCount() < 0) {
echo 'erro usuario não existe';
exit();
} else {
$usuarioQuery = $stmt->fetch();
$validate = password_verify($e->getSenha(), $usuarioQuery['senha']);
}
} catch (Exception $ex) {
echo 'Erro ao validar senha';
}
A dúvida esta na parte que busco no BD um usuário, e ele retorna este usuário com todos os dados , id, usuario e senha que foram os dados da tabela que fiz. Quando coloco o bindValue para buscar a senha tmb, dá erro e nem entra na condicional que conta as linhas afetadas, pois ao fazer essa busca com a senha pura ela nao bate com a senha criptografada.
Se eu criptografar a senha antes de enviar a buscar pela senha do meu usuário no DB ela retorna false visto que o argon2I não estatiza a senha com os mesmos caracteres,
$usuario = filter_input(INPUT_POST , 'usuario', FILTER_SANITIZE_STRING);
$senha= filter_input(INPUT_POST , 'senha', FILTER_SANITIZE_STRING);
$e = new Usuario();
$e->setUsuario($usuario);
$e->setSenha($senha);
password_hash($senha, PASSWORD_ARGON2I);
$stmt = $pdo->prepare(
'SELECT * FROM usuarios WHERE usuario = :usuario AND senha = :senha LIMIT 1'
);
$stmt->bindValue(':usuario', $e->getUsuario());
$stmt->bindValue(':usuario', $e->getSenha());
$stmt->execute();
try {
if ($stmt->rowCount() < 0) {
echo 'erro usuario não existe';
exit();
} else {
$usuarioQuery = $stmt->fetch();
$validate = password_verify($e->getSenha(), $usuarioQuery['senha']);
}
} catch (Exception $ex) {
echo 'Erro ao validar senha';
}
então essa parte eh assim mesmo fazendo a consulta pelo usuario e no fetch pegando tudo se existir? Porque no primeiro código funciona no segundo não.