pedrovisk 1 Denunciar post Postado Janeiro 31, 2014 Olá! Estou trabalhando em uma página com consulta pelo MSSQL 2008 e PDO no PHP, confira minha consulta abaixo: $sql = "SELECT * From Fornecedor "; $stmt = $pdo->prepare($sql);$stmt->execute(); $results = $stmt->fetchAll(PDO::FETCH_ASSOC); if ($stmt->rowCount() < 0) : Exibe os registros Total de Registros: <?php echo $stmt->rowCount();?> endif; $con = null; A linha <?php echo $stmt->rowCount();?> está exibindo o valor -1 como total de registros. Outro problema que encontrei foi quando altero o if ($stmt->rowCount() < 0) para o rowCount() > 0, os registros não são exibidos e preciso alterar para < 0. O que pode ser? Compartilhar este post Link para o post Compartilhar em outros sites
webdevbr 35 Denunciar post Postado Janeiro 31, 2014 Tente assim: <?php $sql = "SELECT * From Fornecedor "; $stmt = $pdo->prepare($sql);$stmt->execute(); $results = $stmt->fetchAll(PDO::FETCH_ASSOC); if (count($results) > 0) { // Exibe os registros echo "Total de registros encontrados: ".count($results)."<br/>\n"; echo "Listando registros..."; foreach($results as $result) { // Blabla... } } else { echo "Nenhum registro encontrado.<br/>\n"; } $con = null; Compartilhar este post Link para o post Compartilhar em outros sites
Marcielo 108 Denunciar post Postado Janeiro 31, 2014 Creio que esteja relacionado ao tipo de cursor utilizado, o padrão é PDO::CURSOR_FWDONLY e nem todos os drivers oferecem suporte a ele. Tente usar o PDO::CURSOR_SCROLLABLE (ele pode ser um pouco mais lento que o padrão, então utilize quando necessário): $stmt = $pdo->prepare('SELECT...', array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLLABLE)); var_dump($stmt->rowCount()); Compartilhar este post Link para o post Compartilhar em outros sites
pedrovisk 1 Denunciar post Postado Janeiro 31, 2014 Deu certo sim! Muito obrigado pela ajuda! Agora o porque de não ter funcionado desta primeira forma? Compartilhar este post Link para o post Compartilhar em outros sites
Marcielo 108 Denunciar post Postado Janeiro 31, 2014 Você leu p post #3? E tentou aplicar a solução proposta? De fato a solução proposta pelo post #2 resolveria o problema, mas...é uma forma mais lenta em relação a se usar a contagem de registros fornecida pelo driver. Compartilhar este post Link para o post Compartilhar em outros sites
webdevbr 35 Denunciar post Postado Janeiro 31, 2014 Fiquei curioso, porque deixaria mais lento? (#2) Compartilhar este post Link para o post Compartilhar em outros sites
Marcielo 108 Denunciar post Postado Janeiro 31, 2014 O método rowCount() retorna a quantidade de linhas afetadas pela execução do último SQL executado, esse valor é obtido através do próprio SGBD. Sendo assim será mais eficiente que fazer a contagem/recontagem dos registros via PHP, mesmo que não seja tão significativo com uma quantidade de registros pequena. Compartilhar este post Link para o post Compartilhar em outros sites