Ir para conteúdo

Arquivado

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

josenilson

Mensagem quando não encontrar registros da consulta

Recommended Posts

olá pessoal mais uma vez peço a ajude de meus amigos do imaster. 

 

então eu utilizo essa consulta para trazer os dados como um relatório, só que quando consulta e esta consulta vem vazia a pagina fica em branco,   tem como acrescentar uma mensagem caso não encontre nenhum registro ?

 

<?php
		
// Instancia o objeto PDO
$pdo = new PDO('mysql:host=localhost;dbname=root', 'root', '');

// define para que o PDO lance exceções caso ocorra erros
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
		
	$output = "";
	//coletando dados 


	if (isset($_POST["search"])) {
		$searchq = $_POST["search"];
		$searchq = preg_replace("#[^0-9a-z]#i", "",$searchq);
	
		
		$consulta = $pdo->query(" SELECT nome FROM cad_cliente WHERE nome LIKE '$searchq%'   ")or die ("could not search !");
		
		while ($linha = $consulta->fetch(PDO::FETCH_ASSOC)) {
    // aqui eu mostro os valores de minha consulta
   		
	echo "Nome: {$linha['nome']}<br/>";
	}
		}
		
	?>
	

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite,

Tem sim, você deve verificar se foram encontrados registros na sua consulta (um if).

 

Basicamente você precisará obter todos os registros de uma vez e conta-los

 

Algo semelhante a isso:

$dados = $consulta->fetchAll(PDO::FETCH_ASSOC);
$numRows = count($dados);

if($numRows > 0) {
// Monstra os resultados
}
else {
// mostra mensagem de vazio
}

Testa ai, qualquer dúvida volta a postar.

Compartilhar este post


Link para o post
Compartilhar em outros sites
12 minutos atrás, RodriAndreotti disse:

Boa noite,

Tem sim, você deve verificar se foram encontrados registros na sua consulta (um if).

 

Basicamente você precisará obter todos os registros de uma vez e conta-los

 

Algo semelhante a isso:


$dados = $consulta->fetchAll(PDO::FETCH_ASSOC);
$numRows = count($dados);

if($numRows > 0) {
// Monstra os resultados
}
else {
// mostra mensagem de vazio
}

Testa ai, qualquer dúvida volta a postar.

Uma divida,  coloco  esse if dentro do While  ?   tem como mostrar um exemplo junto ao meu código ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

ate aqui deu certo  fiz dessa maneira. 

 

if (isset($_POST["search"])) {
		$searchq = $_POST["search"];
		$searchq = preg_replace("#[^0-9a-z]#i", "",$searchq);
		$consulta = $pdo->query(" SELECT nome FROM cad_cliente WHERE nome LIKE '$searchq%'   ")or die ("could not search !" );

			$dados = $consulta->fetchAll(PDO::FETCH_ASSOC);
			$numRows = count($dados);

			if($numRows > 0) {
			print_r($dados);
				
			}
			else {
			echo" Não há registro";
						}
		}

mas  a consulta esta retornando dessa forma 

 

Array ( [0] => Array ( [nome] => BENTO SILVA ARAUJO ) ) 

 

como faço para organizar,  quero que o resultado seja só o nome  sem isso Array ( [0] => Array ( [nome] =>

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como você está fazendo um select usando o LIKE pode ser que traga mais de um registro! Neste caso você tem que fazer um foreach na variável de retorno e exibir os nome!

foreach ($dados as $result) {
	echo $result['nome'];
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
15 horas atrás, Cleiton Alves disse:

Como você está fazendo um select usando o LIKE pode ser que traga mais de um registro! Neste caso você tem que fazer um foreach na variável de retorno e exibir os nome!


foreach ($dados as $result) {
	echo $result['nome'];
}

 

Exato, complementando, tanto o print_r quanto o var_dump sempre irão mostrar o array completo, eles basicamente mostram informações sobre a variável, para maiores informações:http://php.net/manual/pt_BR/function.print-r.php

Compartilhar este post


Link para o post
Compartilhar em outros sites

@josenilson, Recomendo você utilizar a função rowCount() nativa do PDO para contagem de registros, diretamente após a query, pois dessa forma você evitar executar o fetchAll() caso não aja registros.

if (isset($_POST["search"])) {
		$searchq = $_POST["search"];
		$searchq = preg_replace("#[^0-9a-z]#i", "",$searchq);
		$consulta = $pdo->query(" SELECT nome FROM cad_cliente WHERE nome LIKE '$searchq%'   ")or die ("could not search !" );
		if($consulta->rowCount() > 0){
			$dados = $consulta->fetchAll(PDO::FETCH_ASSOC);
			foreach($dados AS $res){
				print $res['nome'];
			}
		}else{
			print 'Não há registros.';
		}
	
}

Compartilhar este post


Link para o post
Compartilhar em outros sites
11 minutos atrás, Alaerte Gabriel disse:

@josenilson, Recomendo você utilizar a função rowCount() nativa do PDO para contagem de registros, diretamente após a query, pois dessa forma você evitar executar o fetchAll() caso não aja registros.


if (isset($_POST["search"])) {
		$searchq = $_POST["search"];
		$searchq = preg_replace("#[^0-9a-z]#i", "",$searchq);
		$consulta = $pdo->query(" SELECT nome FROM cad_cliente WHERE nome LIKE '$searchq%'   ")or die ("could not search !" );
		if($consulta->rowCount() > 0){
			$dados = $consulta->fetchAll(PDO::FETCH_ASSOC);
			foreach($dados AS $res){
				print $res['nome'];
			}
		}else{
			print 'Não há registros.';
		}
	
}

Mas a rowCount() não é usada somente para UPDATE, INSERT e DELETE?

 

Só alguns bancos de dados que retornam esta informação para o select, então neste ponto perderíamos o principal foco da abstração do PDO, ser independentes das particularidades de cada banco.

 

Veja o que a documentação do PHP diz: http://php.net/manual/pt_BR/pdostatement.rowcount.php

Compartilhar este post


Link para o post
Compartilhar em outros sites
6 minutos atrás, Alaerte Gabriel disse:

Não, serve também para SELECT() normalmente.

Bom... vivendo e aprendendo, fiz o teste aqui e no mysql realmente funcionou... rs

 

Eu já tinha tentando usar ela com o postgree e não tinha dado certo.... kkk

Compartilhar este post


Link para o post
Compartilhar em outros sites
Agora, RodriAndreotti disse:

Bom... vivendo e aprendendo, fiz o teste aqui e no mysql realmente funcionou... rs

 

Eu já tinha tentando usar ela com o postgree e não tinha dado certo.... kkk

Tem uma grande maioria achando a mesma coisa, que não funciona com SELECT. A culpa é do manual, eu acho. rsrsrsrs...

 

Já com postgree eu não sei te dizer porque eu nunca testei

Compartilhar este post


Link para o post
Compartilhar em outros sites
35 minutos atrás, Alaerte Gabriel disse:

Tem uma grande maioria achando a mesma coisa, que não funciona com SELECT. A culpa é do manual, eu acho. rsrsrsrs...

 

Já com postgree eu não sei te dizer porque eu nunca testei

Então.. .com postgree eu já testei, precisei fazer um job há alguns meses e não rolou, ai vi essa anotação na documentação e acabei ficando no fetchall mesmo... kkk

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.