josenilson 4 Denunciar post Postado Fevereiro 8, 2017 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
RodriAndreotti 25 Denunciar post Postado Fevereiro 8, 2017 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
rockrgo 138 Denunciar post Postado Fevereiro 8, 2017 Usa o fetchAll e depois faz um count no array. Outra coisa, evita colocar variáveis direto na query, usa statements. http://php.net/manual/en/pdostatement.fetchall.php http://php.net/manual/en/pdostatement.bindvalue.php Compartilhar este post Link para o post Compartilhar em outros sites
josenilson 4 Denunciar post Postado Fevereiro 8, 2017 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
josenilson 4 Denunciar post Postado Fevereiro 8, 2017 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
Cleiton Alves 2 Denunciar post Postado Fevereiro 8, 2017 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
RodriAndreotti 25 Denunciar post Postado Fevereiro 8, 2017 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
Alaerte Gabriel 662 Denunciar post Postado Fevereiro 8, 2017 @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
RodriAndreotti 25 Denunciar post Postado Fevereiro 8, 2017 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
Alaerte Gabriel 662 Denunciar post Postado Fevereiro 8, 2017 Não, serve também para SELECT() normalmente. Compartilhar este post Link para o post Compartilhar em outros sites
RodriAndreotti 25 Denunciar post Postado Fevereiro 8, 2017 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
Alaerte Gabriel 662 Denunciar post Postado Fevereiro 8, 2017 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
RodriAndreotti 25 Denunciar post Postado Fevereiro 8, 2017 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