Jump to content
Luan Agusto

Retorno SELECT Orientado ao Objeto

Recommended Posts

Estou querendo percorrer uma return de Um select, mas quando o return e maior que um, ele retorna uma erro, as variaveis ficam nulas. 

 

alguém pode me ajudar  ?

 

class Extracao {

      private $codblo;
      private $codpro;
      private $zonsts;
      private $allsts;
      private $dplsts;
      private $nivsts;
      private $ds1pro;
      private $pcbpro;
      private $etapal;
      private $uvcsto;
      private $datrec;
      private $datfvi;
      private $uvcdes;

      public function getCodblo(){
        return $this->codblo;
      }

      public function setCodblo($codblo){
        $this->codblo = $codblo;
      }

      public function getCodpro(){
        return $this->codpro;
      }

      public function setCodpro($codpro){
        $this->codpro = $codpro;
      }

      public function getZonsts(){
        return $this->zonsts;
      }

      public function setZonsts($zonsts){
        $this->zonsts = $zonsts;
      }

      public function getAllsts(){
        return $this->allsts;
      }

      public function setAllsts($allsts){
        $this->allsts = $allsts;
      }

      public function getDplsts(){
        return $this->dplsts;
      }

      public function setDplsts($dplsts){
        $this->dplsts = $dplsts;
      }

      public function getNivsts(){
        return $this->nivsts;
      }

      public function setNivsts($nivsts){
        $this->nivsts = $nivsts;
      }

      public function getDs1pro(){
        return $this->ds1pro;
      }

      public function setDs1pro($ds1pro){
        $this->ds1pro = $ds1pro;
      }

      public function getPcbpro(){
        return $this->pcbpro;
      }

      public function setPcbpro($pcbpro){
        $this->pcbpro = $pcbpro;
      }

      public function getEtapal(){
        return $this->etapal;
      }

      public function setEtapal($etapal){
        $this->Etapal = $etapal;
      }

      public function getUvcsto(){
        return $this->uvcsto;
      }

      public function setUvcsto($uvcsto){
        $this->uvcsto = $uvcsto;
      }

      public function getDatrec(){
        return $this->datrec;
      }

      public function setDatrec($datrec){
        $this->daterec = $datrec;
      }

      public function getDatfvi(){
        return $this->datfvi;
      }

      public function setDatfvi($datfvi){
        $this->datfvi = $datfvi;
      }

      public function getUvcdes(){
        return $this->uvcdes;
      }

      public function setuvcdes($uvcdes){
        $this->uvcdes = $uvcdes;
      }

      public function setData($data){

        $this->setCodblo($data['CODBLO']);
        $this->setCodpro($data['CODPRO']);
        $this->setZonsts($data['ZONSTS']);
        $this->setAllsts($data['ALLSTS']);
        $this->setDplsts($data['DPLSTS']);
        $this->setNivsts($data['NIVSTS']);
        $this->setDs1pro($data['DS1PRO']);
        $this->setPcbpro($data['PCBPRO']);
        $this->setEtapal($data['ETAPAL']);
        $this->setUvcsto($data['UVCSTO']);
        $this->setDatrec($data['DATREC']);
        $this->setDatfvi($data['DATFVI']);
        $this->setuvcdes($data['UVCDES']);

      }

      public function getList($codpro){

        $list = new Sql();
        $results = $list->select("SELECT gests.ZONSTS, gests.ALLSTS, gests.DPLSTS, gests.NIVSTS, gests.CODPRO, gepal.DS1PRO, gepal.PCBPRO, gepal.ETAPAL, gepal.DATREC, gepal.DATFVI, gepal.UVCSTO
          FROM gests LEFT JOIN gepal ON gests.CODPRO = gepal.CODPRO
          WHERE gests.CODPRO = :CODPRO", array(
          ":CODPRO"=>$codpro

        ));

        return $results;
        //var_dump($results);
        //if(count($results) > 0){
        //  $this->setData($results);
        //}
      }

      public function __toString(){

        return json_encode(array(
          "CODBLO"=>$this->getCodblo(),
          "CODPRO"=>$this->getCodpro(),
          "ZONSTS"=>$this->getZonsts(),
          "ALLSTS"=>$this->getAllsts(),
          "DPLSTS"=>$this->getDplsts(),
          "NIVSTS"=>$this->getNivsts(),
          "DS1PRO"=>$this->getDs1pro(),
          "PCBPRO"=>$this->getPcbpro(),
          "ETAPAL"=>$this->getEtapal(),
          "UVCSTO"=>$this->getUvcsto(),
          "DATREC"=>$this->getDatrec(),
          "DATFVI"=>$this->getDatfvi(),
          "UVCDES"=>$this->getUvcdes()

        ));
      }
  }


 ?>
 

 

// index.php

 

<?php

  require_once 'config.php';

/*  $sql = new Sql();
  $results = $sql->select("SELECT *FROM gests");
  echo json_encode($results);
*/

  $conn = new Extracao();
  $conn->getList("7896290300011");
  //echo $conn;

 ?>
 

Share this post


Link to post
Share on other sites

@Luan Agusto Bom dia!

 

Caso você use PDO na sua conexão com o banco de dados e como pareamento fetch_style você use PDO::FETCH_ASSOC;

 

Na sua class de conexão você utiliza qual método para retorna os valores encontrados no banco de dados, você usa fetch ou fetchAll?

  • Se você usa o fetch, ele só vai retorna a ultima linha ou a unica linha da consulta com o banco de dados, porém se você o fetchAll ele vai retorna uma Matrix de array com todas as linha da consulta ou uma unica linha da consulta.
  • Quando você utiliza o fetchAll e a consulta retorna mais de uma linha, ele vai mostra uma Matrix contendo todos os resultados encontrados, e você está tentando acessar essa Matrix como se você um array.

Caso você use mysqli processual ou orientado a object

 

Na sua class de conexão você utiliza qual método para retorna os valores encontrados no banco de dados, você usa fetch_array ou fetch_assoc?

  • Se você usa o fetch_array, ele só vai retorna a ultima linha ou a unica linha da consulta com o banco de dados, porém se você o fetch_assoc ele vai retorna uma Matrix de array com todas as linha da consulta ou uma unica linha da consulta.
  • Quando você utiliza o fetch_assoc e a consulta retorna mais de uma linha, ele vai mostra uma Matrix contendo todos os resultados encontrados, e você está tentando acessar essa Matrix como se você um array.

O problema está em como você manipula o resultado da consulta com o banco de dados

 

O retorna de uma consulta com um único resultado:

array(3) { ["id"]=> string(1) "1" ["login"]=> string(7) "gabriel" ["email"]=> string(17) "gabriel@gmail.com" }

Para acessar esse array basta apontar a chave que você quer acessar

$x = $array["id"];
echo($x);
// O retorno é:
// 1

 

Agora o retorno de uma consulta com vários resultados:

array(3) { 
	[0]=> array(3) { ["id"]=> string(1) "1" ["login"]=> string(7) "gabriel" ["email"]=> string(17) "gabriel@gmail.com" } 
	[1]=> array(3) { ["id"]=> string(1) "2" ["login"]=> string(6) "rafael" ["email"]=> string(16) "rafael@gmail.com" } 
	[2]=> array(3) { ["id"]=> string(1) "3" ["login"]=> string(5) "Lucas" ["email"]=> string(15) "Lucas@gmail.com" } 
}

Para acessar esse array, você tem que escolher qual linha você quer acessar e depois apontar a chave.

$array[1]["id"]
// O retorno é:
// 2

 

O problema está no seu método setData(), você projetou ele para trabalhar com um array e não com uma Matrix.

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 Thomeny
      Olá pessoal, sou novo no mundo da programação e banco de dados, quer dizer passei vários anos parado em outra área e agora resolvi voltar.
       
      Enfim estou precisando fazer o seguinte:
       
      Tenho dois campos que usa um select (irei colocar logo abaixo) para ambos.
      Esse select traz o resultado iguais para os dois, porém o cliente precisa fazer o seguinte:
       
      Para combobox 1 ao selecionar paciente, esse paciente não apareça no combobox dois porque já foi selecionado.
       
      Como procedo, se puderem ser claros, abaixo segue o select usado em ambos pra trazer a lista de pacientes...
       
      Select Distinct
        PC.PES_COD,
        PC.PES_NOME,
        PF.NASCIMENTO,
        PF.PFI_MAE,
        Concat(PC.PES_COD, ' - ', LTrim(RTrim(PC.PES_NOME)), ' - ', PF.NASCIMENTO, ' - ', LTrim(RTrim(PF.PFI_MAE))) As NOME
      From
        GER_PESSOA PC
        Inner Join
        GER_PESSOA_FISICA PF On (PC.PES_COD = PF.PES_COD)
      Order By
        PC.PES_NOME
    • By JurisCode
      OLÁ A TODOS, Boa tarde. Preciso de ajuda com o seguinte script.
       
      eu tenho uma array que é a seguinte:
       
      array (size=7)   0 => string 'gu' (length=2)   1 => string 'tr' (length=2)   2 => string 'fr' (length=2)   3 => string 'ip' (length=2)   4 => string 'al' (length=2)   5 => string 'po' (length=2)   6 => string 'xa' (length=2) Cada string da array de duas letra é a abreviatura de uma cidade; eu quero fazer uma pesquisa na base da dados para cada sigla dessa para ver qual a cidade correspondente. Como vai ser necessariamente um resultado apenas, eu tive que usar o foreach.
       
      Tipo
      foreach($array as $variavel);         {         $busca = $conn->query("SELECT * FROM tabela WHERE sigla = '$variavel'");         $resultado = $busca->fetch_assoc();         echo ' - '. $resultado['significado_da_sigla'];         } } Não está funcionando perfeitamente, mas imprime apenas o último resultado.
       
      Eu já tentei uma variável para ir acumulando o resultado, tipo
       
      if (empty('$resultado_busca')) {     $resultado_busca = $resultado['significado_da_sigla'];     }     else {     $resultado_busca = $resultado_busca . ' - ' . $resultado['significado_da_sigla'];     } ou seja, se a variável foi vazia (da primeira vez), então vai criar uma variável com o primeiro resultado, se a variável já existir (das outras vezes), então a variável vai ser igual à variavel anteriormente criado adicionando um traço e o próximo resultado.
       
      E depois, em vez de imprimir a variável com fetch_assoc $resultado['significado_da_sigla'] eu imprimiria a variável &resultado_busca, que em cada ciclo iria acumulando os resultados, mas também não está funcionando, essa não imprime nada na tela.
       
      Alguém pode dar uma ajuda?
       
      OBRIGADO, DESDE JÁ
    • By Akahs
      Caros Amigos, 
      Estou com uma dúvida que me atormenta tem uma semana e simplesmente travei por não conseguir resolver. 
      Tenho um site onde o cliente vai escolher, através de um formulário de registro, se ele vai necessitar ou não de um traslado até o evento. Caso ele escolha "Não", nada acontece. Caso ele escolha "Sim", eu quero que apareça o outro select com as opções de hotéis de onde ele vai se hospedar para pegar o traslado. Pois bem, eis meu código na parte de formulário:
       
      <div class="col-md-6"> <div class="form-group"> <select class="form-control" name="traslado" id="traslado"> <option value="">Necessita Traslado?*</option> <option value="Sim">Sim</option> <option value="Não">Não</option> </select> </div> </div> <div class="col-md-6" id="teste"> <div class="form-group" style="display:none;"> <select class="form-control" name="hotel" id="hotel"> <option value="0">Se Sim, escolha o Hotel de Origem*</option> <option value="SleepIn Jacarei">SleepIn Jacareí</option> <option value="Ibis Jacarei">Íbis Jacareí</option> <option value="Ibis SJC">Ibis SJC</option> <option value="Novotel SJC">Novotel SJC</option> </select> </div> </div>  
      Percebam que, ao responder "Sim" para a opção de "Traslado" eu quero que as opções de "Hoteis" apareçam juntamente com o outro grupo de select "form-control". 
      Pensei em duas formas de trabalhar:
      A primeira seria manipulando a div do "form-control" relativo aos hoteis, ela fica oculta e ao clicar em Sim em "Traslado" ela aparece. (Tentei fazer, sem sucesso.)
      A outra seria manipular o style "display:none", enfim, uma idéia que me ocorreu. 
       
      Fiz uns códigos em JavaScript porém nenhum funcionou, o que cheguei mais perto foi sumir o formulário todo.
      Se alguém puder dar alguma dica e/ou solução ficarei enormemente agradecido. 
      Att,

    • By JurisCode
      eu tenho uma array que é a seguinte:
      array (size=7)   0 => string 'gu' (length=2)   1 => string 'tr' (length=2)   2 => string 'fr' (length=2)   3 => string 'ip' (length=2)   4 => string 'al' (length=2)   5 => string 'po' (length=2)   6 => string 'xa' (length=2) eu quero fazer uma pesquisa na base da dados para cada sigla dessa para ver qual o significado correspondente. Como vai ser necessariamente um resultado apenas, não tem motivo para usar o while, mas fazer via foreach.
       
      Tipo
      foreach($array as $variavel); { $busca = $conn->query("SELECT * FROM tabela WHERE sigla = '$variavel'"); $resultado = $busca->fetch_assoc(); echo ' - '. $resultado['significado_da_sigla']; } }  
      Mas tá imprimindo só o último resultado.
    • By asacap1000
      Galera não sei o porque mas n select abaixo eu preciso mostrar o ultimo registro de uma das datas que são lançadas.
      SELECT IO.ID_IN_OUT TICKET, TO_CHAR(IO.TIME_ARRIVAL, 'DD/MM/YYYY HH24:MI') CHEGADA, TO_CHAR(IO.TIME_RELEASE_IN, 'DD/MM/YYYY HH24:MI') LIBERADO, TO_CHAR(IO.TIME_IN, 'DD/MM/YYYY HH24:MI') ENTRADA, SUBSTR(SP.NAME, 0, 18) TRANSPORTADORA, SUBSTR(DR.NAME, 0, 18) MOTORISTA, VE.PLATE PLACA, (SELECT DISTINCT MAX(TOS.PLATZ) DOCA FROM PICKAUF PI, AUFTRAEGE TOS, (SELECT IO.ID_IN_OUT, MAX(IO.TIME_RELEASE_PP) TIME_RELEASE_PP, IOP.DOCUMENT, MAX(IO.TIME_OUT) TIME_OUT FROM IN_OUT IO, IN_OUT_POS IOP WHERE IO.ID_IN_OUT = IOP.ID_IN_OUT --AND IO.ART_IN_OUT IN ('CA', 'CCE', 'CC') AND IO.STAT <> '80' GROUP BY IOP.DOCUMENT, IO.ID_IN_OUT) SAD WHERE PI.CHARGE = TOS.NR_AUF AND SAD.ID_IN_OUT = IO.ID_IN_OUT AND SAD.DOCUMENT(+) = REPLACE(TRANSLATE(TOS.HINW_ZUST, '/-', ' '), ' ') GROUP BY SAD.ID_IN_OUT) DOCA FROM IN_OUT IO, SPEDITEURE SP, VEHICLE VE, TRACTOR TR, DRIVER DR WHERE IO.STAT <> '80' AND IO.TIME_ARRIVAL IS NOT NULL AND TR.ID_TRACTOR = IO.ID_TRACTOR AND DR.ID_DRIVER = IO.ID_DRIVER AND VE.ID_VEHICLE = IO.ID_VEHICLE AND IO.TIME_RELEASE_PP IS NULL AND SP.ID_SPEDITEUR = IO.ID_SPEDITEUR AND IO.ART_IN_OUT IN ('CA', 'CC', 'CCE', 'CV') and rownum = '1' ORDER BY TO_CHAR(IO.TIME_RELEASE_IN, 'DD/MM/YYYY HH24:MI') Neste Select temos as datas de CHEGADA, LIBERADO, ENTRADA. eu preciso mostrar o ultimo registro do LIBERADO. Eu já fiz um max porém não retornou.Ela será utilizada em um telão no pátio de uma empresa.
       
      O telão será desta forma
       

×

Important Information

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