Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal, eu to tengo o seguinte problema: eu faço uma query e pego o resultado usando o método fetch e passo a uma variável o valor retornado. Depois uso a função count nessa variável, so que a função count sempre retorna 1, mesmo o cadastro não existindo!
<?php
$consulta = "SELECT email FROM dados WHERE email= ?";
$rt = $conexao->prepare($consulta);
$rt->bindParam(1, $mail);
try{
$rt->execute();
} $erro = $e->getMessage()."\n";
$handle = fopen("log_consulta.txt", "a");
fwrite($handle, $erro);
fclose($handle);
mail("destinatario", "assunto", $erro);
echo "Houve um erro ao processar o seu cadastro! Um e-mail já foi enviado ao administrador!";
}
$rows = $rt->fetch(PDO::FETCH_ASSOC);?>
<?php
$rows = $rt->fetch(PDO::FETCH_ASSOC);
$rows = count($rows);
?>
Obrigado!
Não sei porque, mas agora funcionou, usando o count mesmo! Obrigado! Podem fechar o tópico!
Acontece que fetch() sempre vai retornar um único registro, logo utilizar count() sobre ele vai sempre retornar um.
Esse método serve para, principal mas não exclusivamente, duas coisas: Ser usado quando apenas um único registro deva ser retornado ou montando um loop manual, pois a cada invocação feita o próximo registro da consulta será retornado.
>
Acontece que fetch() sempre vai retornar um único registro, logo utilizar count() sobre ele vai sempre retornar um.
Esse método serve para, principal mas não exclusivamente, duas coisas: Ser usado quando apenas um único registro deva ser retornado ou montando um loop manual, pois a cada invocação feita o próximo registro da consulta será retornado.
Eu li mesmo que ele só retorna um, mas o que acontece no meu caso, é que o e-mail é unico, não podem ter dois e-mail's iguais! Você aconselharia usar o fetchAll? E quanto aos parâmetros driver e len? Devo indicá-los?
Obrigado!
Antes de cadastrar um e-mail, você deve verificar se o mesmo já existe. Se existir, barra o processo.
O certo seria usar fetch(), mas se estiver com problemas, fetchAll() também dá certo.
A propósito, seu código está errado. Veja o correto:
<?php
$consulta = "SELECT email FROM dados WHERE email= ?";
try{
$rt = $conexao->prepare($consulta);
$rt->bindParam(1, $mail);
$rt->execute();
$rows = $rt->fetch(PDO::FETCH_ASSOC);
$rows = count($rows);//SO RETORNA 1, MESMO O QUE O E-MAIL NÃO ESTEJA CADASTRADO
} $erro = $e->getMessage()."\n";
$handle = fopen("log_consulta.txt", "a");
fwrite($handle, $erro);
fclose($handle);
mail("destinatario", "assunto", $erro);
echo "Houve um erro ao processar o seu cadastro! Um e-mail já foi enviado ao administrador!";
}
?>
Entendeu o que eu fiz? Todo o código que deve ser executado vai no try, porque não apenas o execute() pode disparar uma Exception.
ja q o count() não funcinou, utilize o rowCount ( void ) eu sei no manual diz q o resultado não pode ser garantindo em td os bancos......
provavelmente deve funcionar 100% no mysql.
E no firebird sera funciona? qtas pessoas você ouve falar q usa php e firebird?