Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

pedrovisk

Resultado -1 no rowCount() com MSSQL e PDO

Recommended Posts

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

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

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

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

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

Fiquei curioso, porque deixaria mais lento? (#2)

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.