Ir para conteúdo

POWERED BY:

Arquivado

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

Rodrigo_laguna

[Resolvido] Contar total de noticias com PDO

Recommended Posts

Olá amigos, quero fazer a contagem de todas as noticias inseridas no BD e mostrar na tela, da forma como segue abaixo quando coloco o código em um servidor Windows ele me mostra correto o que quero, porém no Linux ele da o seguinte erro:

 

Fatal error: Allowed memory size of 67108864 bytes exhausted (tried to allocate 501468 bytes) in /home/public_html/teste/principal.php on line 23

 

A minha linha 23 é essa "$resultado_query = $query_select->fetchALL(PDO::FETCH_ASSOC);"

 

<?php
$sql_select = 'SELECT * FROM tb_materias';
$sql_categorias = 'SELECT * FROM tb_menuprinc';
$sql_usuarios = 'SELECT * FROM tb_usuarios';

try{
$query_select = $conecta->prepare($sql_select);
$query_select->execute();
$resultado_query = $query_select->fetchALL(PDO::FETCH_ASSOC);
$count = $query_select->rowCount(PDO::FETCH_ASSOC);	

$query_categorias = $conecta->prepare($sql_categorias);
$query_categorias->execute();
$resultado_categorias = $query_categorias->fetchALL(PDO::FETCH_ASSOC);
$countCat = $query_categorias->rowCount(PDO::FETCH_ASSOC);

$query_usuarios = $conecta->prepare($sql_usuarios);
$query_usuarios->execute();
$resultado_usuarios = $query_usuarios->fetchALL(PDO::FETCH_ASSOC);
$countUser = $query_usuarios->rowCount(PDO::FETCH_ASSOC);	


}catch (PDOexception $error_select){
	echo 'Erro ao selecionar'.$error_select->getMessage();
}

if($count == '0' ){
		echo 'Nenhuma noticia encontrada';
	}else{
//echo 'Encontramos '.$count.' Resultados<br>';
foreach($resultado_query as $res){
		$idMateria = $res['idMateria'];
		$titulo1 = $res['titulo1'];
		$titulo2 = $res['titulo2'];
		$titulo3 = $res['titulo3'];
		$status = $res['status'];
		$cliquesMateria = $res['cliquesMateria'];
		$dataMateria = $res['dataMateria'];
		$idMenuMat = $res['idMenuMat'];
		$corpoMateria = $res['corpoMateria'];
	}
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloquei o código como você falou mas o erro permaneceu o mesmo, ele está dizendo que a memória está esgotada, mas eu so quero contar o total de registros e não estou pedindo para listar os mesmo, será que tem algo de errado no meu código sql? ou na variável que conta os registros?

 

Valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

É...

 

Você esta executando 3 comandos select, sem filtros, e alocando todos os campos de todos os registros em memória para apenas contar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu quero contar e mostrar na tela todos os registros de usuarios, menus e noticias por isso usei 3 selects, fiz dessa maneira agora, pode ver se está correto?

 

<?php
$sql_select = 'SELECT * FROM tb_materias';
$sql_categorias = 'SELECT * FROM tb_menuprinc';
$sql_usuarios = 'SELECT * FROM tb_usuarios';

try{
$query_select = $conecta->prepare($sql_select);
$query_select->execute();
$count = $query_select->rowCount(PDO::FETCH_ASSOC);	

$query_categorias = $conecta->prepare($sql_categorias);
$query_categorias->execute();
$countCat = $query_categorias->rowCount(PDO::FETCH_ASSOC);

$query_usuarios = $conecta->prepare($sql_usuarios);
$query_usuarios->execute();
$countUser = $query_usuarios->rowCount(PDO::FETCH_ASSOC);


}catch (PDOexception $error_select){
	echo 'Erro ao selecionar'.$error_select->getMessage();
}

if($count == '0' ){
		echo 'Nenhuma noticia encontrada';
	}else{
//echo 'Encontramos '.$count.' Resultados<br>';

}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema não é o SELECT, você pode contar os registros normalmente, o que você pode fazer neste caso é dar um fetch na query 1 , exibir, remover o array , fetch na query 2 , exibir , remover o array ..

Compartilhar este post


Link para o post
Compartilhar em outros sites

desse jeito que você fez não esta echoando nada, só esta selecionando, faz um teste de mesa.

deixa apenas uma query, select etc o resto tu comenta e diz se o erro continuou

 

 

<?php
       $sql_select = 'SELECT * FROM tb_materias';
       $sql_categorias = 'SELECT * FROM tb_menuprinc';
       $sql_usuarios = 'SELECT * FROM tb_usuarios';

try{
       $query_select = $conecta->prepare($sql_select);
       $query_select->execute();
       $count = $query_select->rowCount(PDO::FETCH_ASSOC);     

       $query_categorias = $conecta->prepare($sql_categorias);
       $query_categorias->execute();
       $countCat = $query_categorias->rowCount(PDO::FETCH_ASSOC);

       $query_usuarios = $conecta->prepare($sql_usuarios);
       $query_usuarios->execute();
       $countUser = $query_usuarios->rowCount(PDO::FETCH_ASSOC);


       }catch (PDOexception $error_select){
               echo 'Erro ao selecionar'.$error_select->getMessage();
       }

       if($count == '0' ){
                       echo 'Nenhuma noticia encontrada';
               }else{
       //echo 'Encontramos '.$count.' Resultados<br>';

       }
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

É impressão minha ou você quer só mostrar o total? Se for isto, modifique a sua query para retornar somente o count, porque não faz sentido trazer todos os dados do banco só para fazer a contagem no PHP:

 

$sql_select = 'SELECT COUNT(id) AS total FROM tb_materias';
$sql_categorias = 'SELECT COUNT(id) AS total FROM tb_menuprinc';
$sql_usuarios = 'SELECT COUNT(id) AS total FROM tb_usuarios';

try {
$query_select = $conecta->prepare ( $sql_select );
$query_select->execute ();
$count = $query_select->fetchColumn ();

$query_categorias = $conecta->prepare ( $sql_categorias );
$query_categorias->execute ();
$countCat = $query_categorias->fetchColumn ();

$query_usuarios = $conecta->prepare ( $sql_usuarios );
$query_usuarios->execute ();
$countUser = $query_usuarios->fetchColumn ();
} catch ( PDOexception $error_select ) {
echo 'Erro ao selecionar' . $error_select->getMessage ();
}

echo 'Total de materiais -> ' . $count;
echo 'Total de menus -> ' . $countCat;
echo 'Total de usuarios -> ' . $countUser;

 

Algo nesta linha. Não testei, mas deve funcionar.

 

Carlos Eduardo

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.