Jump to content
ment0r

Problema ou ler array retornado de uma função

Recommended Posts

Bom dia amigos, tudo bem?

 

Sou novo em POO e estou com algumas dificuldades.

Tenho um método de uma classe que é bem simples, ele busca todos os campos da tabela USUARIO (Firebird 2.0) e retorna o array com elas. Só que a não consigo exibi-los com while.

 

Sem o método eu faria:

while($array = ibase_fetch_object($query)){
	echo $array->ID;
	echo "<br>";
	echo $array->ID;
	// E por aí vai...
}
public function selectAllUsers(){
	$select = "select * from USUARIO";
	$query = ibase_query($select);
	$array = ibase_fetch_object($query);

	return $array;
}

Só que com o array não consigo. Não sei como usar o while com esse array retornado.

 

Por favor, se alguém puder me ajudar... serei grato.

Um abraço a todos.

 

Share this post


Link to post
Share on other sites

Você está percorrendo errado, precisa percorrer o cara que você está retornando, ex:

while($row = ibase_fetch_object($array)){
	echo $row->ID . "<br>";
	// ou $row['ID'] . "<br>";
}

A sintaxe parece a mesma do mysqli, verifique se é mesmo ibase_fetch_object que percorre o array. Certifique-se também que $array está com os dados da consulta.

 

Sugiro pesquisar por foreach, que é específico para percorrer array e objetos, veja: http://php.net/manual/pt_BR/control-structures.foreach.php

 

 

Share this post


Link to post
Share on other sites

Primeiramente muito obrigado.

 

Amigos, eu não expliquei corretamente ou vocês entenderam errado: a função ibase_fetch_object() está sendo usada num método na minha classe; quero que esse método retorno um array com todos os dados vindos dessa query (um select) e então eu exiba esses dados na minha página.

 

O problema não está na função ibase_fetch_object(), mas sim ao exibir as informação. Vejam meu método:

 

	public function select($login){
		$select = "select * from USUARIO where login = ".$login;
		$query = ibase_query($select);
		$array = ibase_fetch_object($query);

		return $array;
	}

Ele retorna o array - e tudo bem que nesse caso ele pegue só a primeira linha do registro - e na página que eu chamo esse método, eu quero exibir os registros dele.

 

Espero que eu tenha conseguido explicar. Fico no aguardo de uma ajuda e desde já, muito obrigado.

Share this post


Link to post
Share on other sites

Mas então, é o que eu passei acima para exibir os dados. Precisa percorrer o Array, ou será que não estou entendendo?

 

Quando você chama um método que tenha um return como é o seu caso, precisa armazenara o retorno numa variável, e depois utilizar ela para exibir os dados que queira.

 

Faça assim, chame o método, e depois de um var_dump no retorno para saber o que está vindo dele, aí vai saber o que vem no Array para utilizar, ok? Ex:

 

$busca_dados = $this->select($login);
var_dump($busca_dados);
exit;

 

Share this post


Link to post
Share on other sites

Obrigado Marcos pela ajuda.

 

Reparei que o resultado de um ibase_fetch_object() é diferente de um array 'convencional'. Então o que eu fiz foi passar o conteúdo desse objeto pra um array e retornar esse array. Não era o que eu queria, porque nesse caso eu sei o número exato do retorno do meu select então deu pra manipular de boa, mas resolveu.

 

Gostaria de saber como tratar melhor os dados vindos de um ibase_fetch_object(), pois como agora vou trabalhar com POO, quero que métodos retorne isso pra mim. Mas enfim...

 

Muito obrigado a todos que se propuseram a ajudar. Um feliz 2019.

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 Leandro Volanick
      Boa tarde pessoal.
       
      Gostaria de uma ajuda em uma consulta sql, onde quero agrupar os todos produtos comprados pelo mesmo CPF, dentro de uma array. 
       
      Segue o que estou usando:
      $data=mysqli_query($mysqli, "SELECT xml.id, xml.xProd as produto, prod.id as iddoproduto, GROUP_CONCAT( prod.xProd ) FROM produtos AS prod LEFT JOIN xml as xml ON xml.xProd = prod.xProd GROUP BY xml.CPFdest"); while($info=mysqli_fetch_array($data)) echo '['.$info['iddoproduto'].'],'; No momento, o codigo está trazendo apenas 1 produto, quero que ele printe todos produtos que o CPFdest já comprou.
       
       
    • By Claudio r Martinez
      Olá amigos, estou sempre navegando pelo forum e sempre encontro a resposta para o que preciso, mas dessa vez não encontrei e estou aqui pedindo um Help.
      Tenho um script em Asp Classico para pagamentos em cartão de crédito.
      no carrinho o usuário pode colocar varios cursos, sendo que cada um tem um limite de parcelas sem juros diferente ou não.
      Sendo assim, precisava encontrar uma forma de encontrar os arrays que tem o mesmo valor para fazer a cobrança noi cartão juntos.
      o sistema fará uma, duas ou mais cobranças diferentes no cartão conforme o numero de parcelas.
      Ex:
      parcelas(1) = 3
      parcelas(2) = 6
      parcelas(3) = 5
      parcelas(4) = 3
       
      preciso montar uma forma de saber quais parcelas são iguais para somar o valor e fazer uma cobrança só com esse numero de parcelas.
      OBS: com essas variaveis acima, o sistema faria 3 cobranças no cartão do cliente, 1 cobrança do valor somado dos itens que tem 3 parcelas selecionadas, 1 cobrança do valor do item que tem 6 parcelas selecionadas e 1 cobrança do item que tem 5 parcelas selecionadas.
      Vocês podem dar um HELP???
    • By Jéssica Nascimento
      document.getElementById("submit").addEventListener("click", searchPokem);   let text = document.getElementById("search").value;   function searchPokemon (text){ for (name of pokemon.name){ console.log(name) } }     PS.: Meu banco de dados tem um let POKEMON com um objeto pokemon que é representado com uma array,  dentro tem todos os tipos de pokemons e suas descrições quero filtrar apenas do name.
    • By fbezerra
      bom dia galera, estou usando Vue js com poo, o problema que estou tendo é que eu não estou conseguindo entender de como passar para o button o id para exclusao, segue abaixo a onde eu parei.
      index.php
       
      <div id="modalMostrar"> <div id="descricoes" class="scroll"> <div class="card" v-for="descricao in descricoes"> <div class="card-header"> <h3 class="card-title">{{descricao.desc_data}}</h3> </div> <div class="card-body"> {{descricao.descricao}} <a class="fa fa-times btn btn-danger right ml3" id="removerRegistro" v-bind:data-codigo="descricao.cli_id"></a> <button class="fa fa-edit btn btn-primary right"></button> </div> </div> </div> </div>  
      script.js
       
      //exibir registro------- $(document).on('click', '#abrirModal', function(event){ event.preventDefault(); var id = $(this).attr('data-id')//pegando id window.desc = new Vue({ el: '#descricoes', data: { descricoes: [] } }); $.ajax({ url: 'ajax/clienteDescricao.php?id=' + id, type: 'GET', dataType: 'JSON' }).done((e) => { desc.descricoes = e; }) $('#modalMostrar').iziModal('open'); }); //remover Registro--------------------------------------------- $(document).on('click', '#removerRegistro', function(event){ event.preventDefault(); var id = $(this).data('codigo');//pegando id window.desc = new Vue({ el: '#descricoes', data: { descricoes: [] } }); $.ajax({ url: 'ajax/removerRegistro.php?id=' + id, type: 'GET', dataType: 'JSON' }).done((e) => { desc.descricoes = e; }) }); removerRegistro.php
       
      <?php require_once "../database/conexao.php"; if(isset($_GET["id"]) && !empty($_GET["id"])){ $conex = new conexao(); echo json_encode($conex->deleteDesc($_GET["id"])); }  
      conexao.php
       
      public function deleteDesc($cli_id){ $sql = $this->conexao->prepare("DELETE FROM descricao WHERE cli_id = :cli_id"); $sql->bindValue(':cli_id', $cli_id); $sql->execute(); } ele não está pegando o id.....
    • By Jeovane Carvalho
      Salve pessoal  tudo bem !
      Depois de muito tempo venho aqui pedir uma ajuda , bem vamos lá...
      Eu tenho uma classe POO e nela pego algumas variáveis que vem como array e uso o implode para enviar através do load do javascript.
      Até aí tranquilo, eu resgato com $_GET  usando o explode, e depois uso implode para separar elas novamente.
      Montei essa rotina toda por se tratar de uma o paginação se reload , bem dinâmica , só que ao passar os parâmetros e as variáveis no bind_param da erro de parâmetros, dizendo que :
       
      Warning: mysqli_stmt::bind_param(): Number of variables doesn't match number of parameters in prepared statement
      E entendi que o erro diz que o número de parametros não condiz com o número de variáveis, E AI QUE ENTRA A MINHA DOR DE CABEÇA...
      Mesmo eu usando implode eu consigo separar as variáveis mas dando um var_dump elas  ficam juntas  e a execução do prepare lê como uma única variável.
      Segue o código abaixo:
       
      <?php class DadosFiltroBusca { private $conecta_banco; public function __construct(){ $this->conecta_banco= new Conexao(); $this->conecta_banco->Conectar(); } public $ativo; public $negocio ; public $tipo; public $cidade; public $bairro; public $id_negocio; public $id_tipo; public $id_cidade; public $id_bairro; public $foto; public $where; public $sqlT_1; public $sqlT_2; public $total; public $current_page; public $get_total_rows; public $item_per_page; public $total_pages; public $total_records; public $pgst; public $page_number; public $page_position ; public $filtro_dados; public $site; public function BuscarFiltroBusca(){ $result=$this->conecta_banco->banco; $this->item_per_page = 4; if(isset($_POST["page"])){ $this->page_number =(isset($_POST['page'])) ? (int)$_POST['page'] : 1; if(!is_numeric($this->page_number)){die('Página inválida!');} //incase of invalid page number }else{ $this->page_number = 1; //if there's no page number, set it to 1 } $negocio = $_GET['negocio']; $this->id_tipo= explode(",",$_GET['tipo']); $this->id_cidade=explode(",",$_GET['cidade']); $this->id_bairro=explode(",",$_GET['bairro']); $idi=implode('', $this->id_tipo); echo "<br /><br />"; $in=(is_array($this->id_tipo) ? count($this->id_tipo):0); $id_tipo = implode(',', array_fill(0, $in, '?')); echo " :: " . $id_tipo_2 =join('', array_fill(0, 1, $idi)); echo " :: ".$types =str_repeat('s',$in); echo "<br /> VAR:: ".$tipo =str_repeat(''.$id_tipo_2.'',1); var_dump ($tipo ); $idi1='5'; $idi2='11'; foreach ($this->id_cidade as $key=> $id_cidade): foreach ($this->id_bairro as $key=> $id_bairro): $ativo='1'; "%".$negocio."%"; $id_tipo; $id_cidade; $id_bairro; echo "<br /><br />RESULTADO :: ". $t='ss'.$types.'ss',$ativo,$negocio,$tipo ,$id_cidade,$id_bairro."<br /><br />"; $where = " i.ativo =? "; if( $negocio) { $where .="AND i.id_negocio_tipo LIKE ?"; }if( $id_tipo ) { $where .=" AND i.id_tipo_imovel IN ($id_tipo)"; } if( $id_cidade ) { $where .=" AND i.id_cidade=?"; } if($id_bairro) { $where .=" AND i.bairro=?"; } $sqlT_1 =$result->prepare("SELECT i.*, t.tipo_nome, b.bairro, n.tipo, c.cidade FROM imoveis i LEFT JOIN negocio_tipo n ON (n.id = i.id_negocio_tipo) LEFT JOIN imoveis_tipo t ON (t.id = i.id_tipo_imovel) LEFT JOIN cidades c ON (c.id = i.id_cidade) LEFT JOIN bairros b ON (b.id = i.bairro) WHERE ".$where.""); $sqlT_1->bind_param('ss'.$types.'ss',$ativo,$negocio,$tipo ,$id_cidade,$id_bairro); $sqlT_1->execute(); $this->sqlT_1 = $sqlT_1->get_result(); $this->get_total_rows+=$this->sqlT_1->num_rows; if($this->get_total_rows >0 ){ $this->total_pages = ceil($this->get_total_rows / $this->item_per_page); } $this->sqlT_1->num_rows; //break records into pages //get starting position to fetch the records if($this->get_total_rows > 0 ){ $this->page_position = (($this->page_number * $this->item_per_page) -$this->item_per_page); $this->pgst = ceil($this->get_total_rows / $this->item_per_page); } $sqlT_1->close(); endforeach; endforeach; $sqlT_2 =$result->prepare("SELECT i.id, i.valor,i.locacao, i.foto_exibicao,i.latitude,i.longitude, i.quartos, i.garagem,i.mapa, i.codigo, t.tipo_nome, n.tipo AS negocio, c.cidade, c.uf, b.bairro FROM imoveis i LEFT JOIN negocio_tipo n ON (n.id = i.id_negocio_tipo) LEFT JOIN imoveis_tipo t ON (t.id = i.id_tipo_imovel) LEFT JOIN cidades c ON (c.id = i.id_cidade) LEFT JOIN bairros b ON (b.id = i.bairro) WHERE ".$where." ORDER BY i.id DESC LIMIT ?,?"); $sqlT_2->bind_param('sssssss',$ativo,$negocio,$idi,$id_cidade,$id_bairro,$this->page_position,$this->item_per_page); $sqlT_2->execute(); $this->sqlT_2=$sqlT_2->get_result(); } } ?> Vejam no código que existem 2 consultas, um select é para montar a páginação sem reflesh e a outra é para buscar os dados do filtro de busca , e para deixar mais claro, se eu colocar no lugar cláusula IN em vez de IN (?) colocar IN ($variavel ) que já foi separada com o implode ela busca perfeitamente as informações , exemplo abaixo:
       
      $where = " i.ativo =? "; if( $negocio) { $where .="AND i.id_negocio_tipo LIKE ?"; }if( $id_tipo ) { $where .=" AND i.id_tipo_imovel IN (?)"; AQUI É AONDE TEM O ARRAY, E AS OUTRAS ESTÃO SEM ARRAYS PARA TESTAR APENAS ESSA VARIÁVEL } if( $id_cidade ) { $where .=" AND i.id_cidade=?"; } if($id_bairro) { $where .=" AND i.bairro=?"; } Acima da aquele erro de; Warning: mysqli_stmt::bind_param(): Number of variables doesn't match number of parameters in prepared statement
      Mas agora logo abaixo vai de boa e forma a paginação e trás os valores:
       
      $where = " i.ativo =? "; if( $negocio) { $where .="AND i.id_negocio_tipo LIKE ?"; }if( $id_tipo ) { $where .=" AND i.id_tipo_imovel IN ($id_tipo)"; } if( $id_cidade ) { $where .=" AND i.id_cidade=$id_cidade"; } if($id_bairro) { $where .=" AND i.bairro=$id_bairro"; }  
      E vi que o problema esta aqui abaixo:
      $sqlT_1->bind_param('ss'.$types.'ss',$ativo,$negocio,AQUI É A VARIÁVEL COM ARRAY -> $tipo ,$id_cidade,$id_bairro); Notem que esta variável dentro dos parâmetros ($types) ela trás o número de parâmetros conforme o critério de busca do filtro de busca, E este parametro como variável eu pego com o str_repeat
      E  se eu montar as variáveis manualmente tipo > $tipo1=15'; e $tipo2='11'; e jogar lá no bind param ela chama de boa tipo assim :
       
      $tipo1='15'; $tipo2='11' $sqlT_1->bind_param('ss'.$types.'ss',$ativo,$negocio,$tipo1,$tipo2 ,$id_cidade,$id_bairro); se eu fizer desta forma chama perfeitamente, e vi que o problema é na hora de separar as variáveis do array.
      Já usei serialize, join, json_decode e nada .
      Se alguém souber de como contornar agradeço. E desculpe pela imensa explicação , mas é para entederem melhor :)
      Obrigado !
       
×

Important Information

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