Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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?
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());Deu certo sim! Muito obrigado pela ajuda!
Agora o porque de não ter funcionado desta primeira forma?
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.
Fiquei curioso, porque deixaria mais lento? (#2)
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.
Tente assim:
if (count($results) > 0) {
// Exibe os registros
else {