Jump to content

Recommended Posts

Estou tentando fazer um aplicativo que salva dados num banco mysql e para isso estou usando o php, só que está apresentando o erro abaixo que não consigo corrigir.

 

Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result_boolean given in <endereço .../query.php> on line 8

 

Abaixo os arquivos:

query.php

<?php	
	require "Db.class.php";
	$db = new Db();

	$sqlBusca = $_POST['sql'];// Pega o codigo sql enviado pelo aplicativo
	$resultado = $db->query($sqlBusca);
	// Transforma o resultado da consulta em um array associativo
	while ($array = mysqli_fetch_assoc($resultado)) {
		$dados[] = $array;
	}
	echo json_encode($dados);// Retorna o resultado da consulta no formato JSON
?>

a classe: Db.class.php

<?php
		
	/**
	*  conex達o com o banco de dados usando mysqli
	*/
	class Db{
		
		private $con;
        function __construct(){
           $this->con = mysqli_connect ('LOCALHOST', 'usuario', 'senha', 'banco');
            // verifica conex達o
            if (mysqli_connect_errno($this->con)) {
				echo "Problemas para conectar no banco. Verifique os dados! ".mysqli_connect_error($this->con);
				die();
			}
        }
		// Faz a consulta sql
		public function query($sql){ //echo $sql; 
			return mysqli_query($this->con, $sql);

		}
	}

?>

 

 

Share this post


Link to post
Share on other sites

Veja se podem me ajudar.

Quando mando a informação do aplicativo, aparece os seguintes resultados:

 

No arquivo Db.class.php

na linha 

public function query($sql){ echo $sql;

Aparece a query correta em $sql. Se eu copiar e colocar no mysql ele insere a linha.

 

Já no arquivo query.php

 

Na linha

$resultado = $db->query($sqlBusca);     var_dump ($resultado);

 

Ao acrescentar o var_dump, aparece como resultado bool(false). Sei que o erro deve estar por aqui, mas não estou conseguindo ver o que estou errando.

 

 

 

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By Guilherme Luiz
      Olá pessoal,
       
      Estou com uma pequena dúvida em relação a buscar dados em json no MySQL.
      No meu banco eu tenho uma table com o seguinte campo em json.
       
      table - contacts
      column - groups_id
       
      Na coluna groups_id eu armazeno ids de grupos em json por exemplo:
      ["252","222","666"]  
      Quando eu realizo a seguinte query
      SELECT * FROM user_contacts WHERE JSON_CONTAINS(group_id, '["252"]')  
      Beleza... Ele me resulta em todos os contatos que possuem o registro 252.
      O que acontece é que essa table é 1 > N, ou seja, um contato pode fazer parte de vários grupos, sendo assim:
       
      quando eu consulto
      SELECT * FROM user_contacts WHERE JSON_CONTAINS(group_id, '["252","222"]') Ele não me resulta nos contatos que estão com grupo 252 ou 222.
      Ele me resulta nos contatos que estão com o grupo 252 e 222, ou seja, ele me retorna somente os contatos que o group id tenha ["252","222"]
       
      Eu vi que nessa situação eu poderia criar um INDEX na minha tabela usando:
      ALTER TABLE user_contacts ADD INDEX groups ( (CAST(group_id->'$.groups' AS UNSIGNED ARRAY)) );  
      Mas o CAST() na versão que Mysqli que eu possuo no servidor 4.6.X me retorna Syntax error.
      Alguem teria uma sugestão ou luz de qual caminho posso seguir nessa situação sem que seja atualizando a versão do bd?
       
       
    • By Jeovane Carvalho
      Olá senhoras e senhores, venho aqui tirar uma dúvida !
       
      Eu desenvolvi um projeto em php para um cliente e hospedei na Hostgator,  como já trabalho com a hospedagem Hostgator há alguns anos, nunca tive problema até quando comecei a trabalhar com PREPARE STATEMENT ,  e aí me gerou uma grande dor de cabeça, e como não tinha muita experiência usando instrução preparada,  comecei a desenvolver meus projetos através desta instrução e rodando de boa localmente, e foi só hospedar remotamente e já deu alguns erros, e o principal de foi    *   Call to undefined method mysqli_stmt::get_result() in  *     e consultando o site  stackoverflow  li um seguinte trecho de um desenvolvedor experiente que:  O mysqli foi introduzido no php 5, já a função get_result pertence ao pacote mysqlnd que é o driver nativo.
       
      E como não tinha ciência desta função MYSQLND  e pelo que eu li, ELA É NATIVA DO MYSQL, e para não perder o plano já contratado, tive que usar em vez de get_result() usar o bind_result (), só que tive dificuldades de alguns dias para resolver, mas consegui fazer com que na classe A, onde esta minhas instruções e conexões com o banco e o loop do while estão , fazer que ao instanciar um objeto e chamar cada variável usando [ ] como array conseguisse pegar todos os dados dentro do loop do while e irei mostrar logo abaixo:
      E a minha dúvida é saber se estaria fazendo de forma correta ou existiria outra forma de usar o foreach para percorrer um array.
       
      Segue abaixo o código de exemplo:
       
       
          CLASSE A:
       
      <?php class DadosAmortecedoresEletricos { private $conecta_banco; public function __construct(){ $this->conecta_banco=new Conexao(); $this->conecta_banco->Conectar(); } public $ativo; public $com_foto; public $sem_foto; public $linha; public $id; public $produto_id; public $negocio; public $negocio_tipo; public $tipos; public $tipo; public $imgP; public $valor; public $negocio_d; public $sqlL_2; public $sqlL_1; // ESSA CLASSE SERVE PARA PAGINAÇÃO public function BuscarDadosAmortecedoresEletricos(){ $conexao=$this->conecta_banco->banco; $Dados=new DadosEmpresa(); $Dados->BuscarDadosEmpresa(); $limit=$Dados->qtd_secao_eletrico; $ativo=$this->ativo=1; $sql_1=$conexao->prepare("SELECT i.id,i.id_produto_tipo,i.id_produto_subtipo,t.tipo,n.tipo_nome FROM dados_anuncio i LEFT JOIN tipo_produto t ON (t.id = i.id_produto_tipo)LEFT JOIN subtipo_produto n ON (n.id = i.id_produto_subtipo) WHERE i.ativo=? AND n.tipo_nome LIKE '%el%' ORDER BY i.id DESC LIMIT ".$limit.""); $sql_1->bind_param('s',$ativo); $sql_1->execute(); $sqlL_1=$sql_1->bind_result($id,$id_produto_tipo,$id_produto_subtipo,$tipo, $tipo_nome); while ($sql_1->fetch()) { $this->produto_id=$id_produto_tipo; $this->subproduto_id=$id_produto_subtipo; } $dados=""; $ativo=$this->ativo=1; // ESSA CLASSE SERVE PARA RESGATAR OS DADOS $sql_1 = $conexao->prepare("SELECT i.id AS idi,i.id_produto_tipo,i.foto_exibicao,i.foto_grande,foto_titulo,i.valor, t.tipo_nome, n.tipo AS tipo FROM dados_anuncio i LEFT JOIN subtipo_produto t ON (t.id = i.id_produto_subtipo) LEFT JOIN tipo_produto n ON (n.id =".$this->produto_id.") WHERE i.ativo=? AND t.tipo_nome LIKE '%el%' AND i.id_produto_subtipo LIKE '%".$this->subproduto_id."%' ORDER BY RAND () LIMIT ".$limit."") ; if($sql_1){ $sql_1->bind_param('s',$ativo); $sql_1->execute(); $sql_1->store_result(); $this->sqlT_3=$sql_1->bind_result($id,$id_produto_tipo,$foto_exibicao,$foto_grande,$foto_titulo,$valor, $tipo_nome, $tipo); while ($sql_1->fetch()) { $this->id[]=$id; $this->tipo[]=$tipo; $this->tipo_nome[]=$tipo_nome; $this->foto_exibicao[]=$foto_exibicao; $this->foto_grande[]=$foto_grande; $this->foto_titulo[]=$foto_titulo; $this->valor[]=$valor; } }} } ?> Minha página onde instancio o objeto abaixo:
       
       
      <?php // Aqui é onde uso os foreach para percorrer cada variável $n=0; $tipos=array(); $n=0; foreach ($dados_elet->id as $key=> $thing) { $tipos[$n][1] = $thing; $n++; } if(is_array($dados_elet->tipo)){ $n=0; foreach ($dados_elet->tipo as $thing) { $tipos[$n][2] = $thing; $n++; }} if(is_array($dados_elet->tipo_nome)){ $n=0; foreach ($dados_elet->tipo_nome as $thing) { $tipos[$n][3] = $thing; $n++; }} if(is_array($dados_elet->foto_exibicao)){ $n=0; foreach ($dados_elet->foto_exibicao as $thing) { $tipos[$n][4] = $thing; $n++; }} if(is_array($dados_elet->foto_grande)){ $n=0; foreach ($dados_elet->foto_grande as $thing) { $tipos[$n][5] = $thing; $n++; }} if(is_array($dados_elet->foto_titulo)){ $n=0; foreach ($dados_elet->foto_titulo as $thing) { $tipos[$n][6] = $thing; $n++; }} if(is_array($dados_elet->valor)){ $n=0; foreach ($dados_elet->valor as $thing) { $tipos[$n][7] = $thing; $n++; }} foreach($tipos as $dados_inf){ $imgP= $dados_inf[4]; $descricao= $dados_inf[6]; $id= $dados_inf[1]; $negocio= $dados_inf[2]; $negocio_id= $dados_inf[2]; $subtipo= $dados_inf[3]; $negocio_tipo= $dados_inf[2]; $tipos= $dados_inf[2]; $valor= $dados_inf[7]; if($valor=='0.00' || $valor==''){$valor='Consulte-nos';}else{ $valor ="R$ ".$valor;} $tipo= $tipos;$tipo= strtolower(str_replace(" ","-",strtr(utf8_decode(trim($tipo)),utf8_decode("áàãâéêíóôõúüñçÁÀÃÂÉÊÍÓÔÕÚÜÑÇ"),"aaaaeeiooouuncAAAAEEIOOOUUNC-"))); $imgP2='img_produtos/thumbs/'.$imgP.''; if(file_exists($imgP2)){$foto='<img class="lozad" data-src="'.$Dados->site.'img_produtos/thumbs/'.$imgP.'" alt="'.$tipo.'" />';}else{$foto='<img src="'.$Dados->site.'images/sem_foto.jpg" alt="'.$tipo.'" />';} echo $com_foto='<ul class="menu"><div class="favoritos_add"> <a data-id="'.$id.'" data-toggle="modal" title="'.$id.'" data-target="#myModalfavoritos'.$id.'" id="'.$id.'" class="hvr-pulse"><img src="images/coracao_fav_ext.png" alt="Favoritos" /></a></div> <li><a title="'.$tipo.' | valor: '.$valor.'" href="'.$Dados->site.'contato">'.$foto.'</a> <div class="fundo_dados"> <div class="dados_tipo">'.$tipos.' </div> <div class="dados_subtipo">'.$subtipo.'</div> <div class="dados_titulo">'.$descricao.'</div> <div class="dados_valor">'.$valor.'</div> <div class="informacoes"><a title="'.$negocio.' | '.$tipo.'| valor: '.$valor.'" href="'.$Dados->site.'contato">MAIS INFORMAÇÕES</a></div> <div class="comparar"> <label><input name="comparar[]" type="checkbox" id="comparar" value="'.$id.'" /> Comparar</label><div class="dados_codigo">código: '.$id.'</div></div> </div></li></ul>'; ?> Notem que para cada variável eu uso um foreach para varrer as informações do while da outra página e por último eu uso um foreach que pega cada variável do foreach e distribuo as informações de cada variável na sua matriz na ordenação  de [1] , [2], [3]  e assim por diante.
      Resumindo , funciona mas queria saber se existe outra maneira com menos linha de código e que fique mais rápido na hora do php compilar ..
      Lembrando que não posso usar GET_RESULLT().
      E acredito que muitos terão este problema quando começarem a atualizar seus códigos..
      Obrigado :)
    • By ma_gr
      Boa tarde, tudo certo?! Estou querendo montar uma query de update de uma forma mais otimizada, sem precisar usar tantos if's.
       
      No meu formulário o usuário irá, da primeira vez, obrigatoriamente ter que enviar a imagem do perfil, documento com foto e comprovante de residência (arquivos de imagens).
      Já nas próximas vezes em que o usuário puder alterar suas informações, os arquivos poderão ser substituídos ou não, ficando a cargo do usuário.
       
      Da primeira vez eu atualizo o status quando as imagens são enviadas.
       
      Pensei em fazer uma concatenação caso !empty()  mas penso que deva ter uma forma melhor de se fazer, além do que eu teria que fazer outros if's para o bind_param().
       
      Espero ter sido claro.
       
      Minha consulta seria basicamente:
       
      $updateData = "UPDATE members SET username=?, lastname=?, nickname=?, emailOpt=?, address=?, number=?, neighborhood=?, city=?, state=?, country=?, cep=?, phone=?, cellphone=?, cpf=?, rg=?, born=?, facebook=?, instagram=?, profile_img=?, profileImgStatus=?, doc_img=?, docStatus=?, address_img=?, addressImgStatus=? WHERE userId = ? "; $stmt = $mysqli->prepare($updateData); $stmt->bind_param( 'sssssssssssssssssssis', $username, $lastname, $nickname, $emailOpt, $address, $number, $neighborhood, $city, $state, $country, $cep, $phone, $cellphone, $cpf, $rg, $born, $facebook, $instagram, $profile_img, $profileImgStatus, $doc_img, $docStatus, $address_img, $addressImgStatus, $userId );  
    • By GobsRuiz
      Estou tentando criar um sistema de envios de comentários. Estou tendo problema com alerta. Primeiramente era do envio. Depois que eu preenchia os campos, enviava e dava um refresh na página(f5), ele envia os mesmos dados, mas colocando o ‘header(location)’, resolvi mas a mensagem não aparece mais e não sei como consigo resolver isso. O outro problema é que quando os campos estão vazios e aparece a mensagem como programei para preencher os campos e dou um f5, ele aparece um alert. A página dá um refresh e continua a mensagem lá e se eu dou refresh de novo, acontece a mesma coisa. Fica nesse loop infinito. Tive que fazer junção das imagen
       
      <?php $host = 'localhost'; $user = 'root'; $password = ''; $banco = 'comentarios'; $bdconnect = mysqli_connect($host, $user, $password, $banco); ?> <!DOCTYPE html> <html lang="pt-br"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Sistema de comentários</title> </head> <body> <form action="" method="post"> <span>Nome: </span><input type="text" name="nome"><br> <span>Email: </span><input type="text" name="email"><br> <span>Mensagem: </span><input type="text" name="mensagem"><br> <input type="submit" name="enviar" value="Enviar"><br> </form> <?php if(isset($_POST['enviar'])){ $nome = $_POST['nome']; $email = $_POST['email']; $mensagem = $_POST['mensagem']; if($nome == '' and $email == '' and $mensagem == ''){ echo 'Preencha todos os campos'; } else{ echo 'Enviado com sucesso'; $insert = mysqli_query($bdconnect, "INSERT INTO comentario_bd(nome, email, mensagem) VALUES('$nome', '$email', '$mensagem')"); header('Location:index.php'); } } ?> </body> </html>


    • By biakelly
      Oi meninos,
       
       
      Peguei um projeto para trabalhar, confesso que ainda estou aprendendo PHP, bem estou recebendo erros nolog do servidor assim: 
       
      PHP Notice:  Use of undefined constant hora - assumed 'hora' in /home/asak9esch1ja/public_html/config/connect.php on line 19
      [22-Jan-2020 10:57:21 UTC] PHP Deprecated:  mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO
       
       
      O servidor esta em PHP 5.6 acredito que esses erros sejam decorrentes dos arquivos de conexão, correto? Se sim, como posso atualizar para a conexão correta?
      Segue abaixo meus dois arquivos.
       
       
       
      Conexao.php
      <?php include_once(dirname(__FILE__)."/config.inc.php"); $db=@mysql_connect($DBSERVER, $USERNAME, $PASSWORD); if (!$db) die('<br /><br /><center><h1>Problemas no servidor:<br /></h1><h3>' . mysql_errno().': '. mysql_error().'</h3></center>'); $resp=@mysql_select_db($DATABASENAME,$db); if (!$resp) die('<br /><br /><center><h1>Banco de dados não foi encontrado!</h1></center>'); include_once(dirname(__FILE__)."/../language/english.php"); if ($timezone_set=="") $timezone_set = "-02:00"; date_default_timezone_set($timezone_set); $sql = @mysql_query("SET TIME_ZONE = '".$timezone_set."'"); //$sql = @mysql_query("Set @@global.timezone = '".$timezone_set."';"); $sql = @mysql_query("Select Now() as hora"); $dados = @mysql_fetch_array($sql); $Hora_Servidor_MySQL = date('Y/m/d H:i:s',strtotime($dados[hora])); //echo ">> $Hora_Servidor_MySQL << "; function utf8ize($d) { if (is_array($d)) { foreach ($d as $k => $v) { $d[$k] = utf8ize($v); } } else if (is_string ($d)) { return utf8_encode($d); } return $d; } ?>  
       
      Config.php:
      <?php @session_start(); ################################################### # Banco de dados ################################################### $DBSERVER ="localhost"; //servidor "localhost" $USERNAME = "usuariomeusite"; // usuario .."root" $PASSWORD = "senhameusite"; //senha $DATABASENAME = "_DB-meusite_"; //banco de dados ################################################### # Configurações do site ################################################### // Titulo geral $AllPageTitle = "meusite.com"; // Endereco do seu site SEM a barra no final como no exemplo: http://www.seusite.com.br $SITE_URL = "https://www.meusite.com"; // E-mail para clientes entrarem em contato $adminemailadd = "contato@meusite.com"; // precisa ser um email do mesmo dominio // se possuir algum dos canais abaixo preencha o endereco e o icone correspondente aparecera no rodapé da pagina $facebook = 'http://facebook.com'; $twitter = 'http://twitter.com'; $youtube = 'http://youtube.com/'; $googleplus = 'http://plus.google.com/'; ################################################### ################################################### # Outras configurações, não alterar. ################################################### $SMSUSERNAME = ""; $SMSPASSWORD = ""; $SMSIPPAGE = ""; $timezone_set = "-03:00"; // Brasil sem horario de verão = "-03:00" $use_stored = true; $aceite_lance_futuro = true; $PRODUCTSPERPAGE_MYACCOUNT = 6; $use_tema = '2'; $PRODUCTSPERPAGE = 10; $total_per_ini2 = 10; $max_pages2 = 100; $items_per_page2 = 5; $Currency = "R$"; $SMSrate = 1.50; $SMSsendnumber = ""; ?>  
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.