Jump to content
lucknot

Duvida com POO E PDO

Recommended Posts

Estou começando a ver sobre poo e pdo para o php só que encontrei um pedra no meio do caminho. A duvida e como passar a array do fecth dentro da function para obter os resultado fora da function. Obrigado se pode me ajudar!

class  

	class usuario extends conexao {
		
		private $id;
		
		public function login($id){
			$this ->id = $id;
			$pdo = parent::getDB();			
			
			$buscardados=$pdo->prepare("SELECT * FROM usuario WHERE id = 1");
			$buscardados->bindValue(":id", $this->getid() );
			$buscardados->execute();
			$linha = $buscardados->fetch(PDO::FETCH_OBJ) or die(print_r($query->errorInfo(), true));;
			var_dump($linha);
		}
		public function setid($id){
			$this->id = $id;			
		}
		public function getid(){
			return $this -> id;	
			
		}

	

chamada da class 

	require_once'../class/usuario.php';
	$u = new usuario;
	echo $u->login(1);

resultado da var_dump

object(stdClass)#4 (3) {
  ["id"]=>
  string(1) "1"
  ["nome"]=>
  string(9) "teste "
  ["email"]=>
  string(5) "teste2"
}

 

Share this post


Link to post
Share on other sites

Use return:

public function login($id){
    /** código omitido **/

    return $buscardados->fetch(PDO::FETCH_OBJ) or die(print_r($query->errorInfo(), true));;
}

E capture em uma variável:

$usuario = new usuario();
$login = $usuario->login($id);

 

Entretanto, sua classe possui alguns problemas quanto a POO, um usuário não é uma conexão. Se usuário é uma classe para gerenciar usuários no banco de dados, ela pode fazer uso de uma conexão.

 

Sugiro a leitura do link abaixo:

 

Share this post


Link to post
Share on other sites

Obrigado pela ajuda. Ao dar um echo na em $login apresenta 1 e ao tentar um var_dump apresenta bool(true), e  assim não esta vindo a array teria uma dica ?

Edited by Gabriel Heming
Remover quote desnecessário

Share this post


Link to post
Share on other sites

Isso depende do que está ocorrendo, pois, está retorando um boolean true. Poste o seu código aonde isso ocorre.

Share this post


Link to post
Share on other sites

e o mesmo código só efetuei as alteração que você deu a dica

	$u = new usuario;
	$login = $u->login($id);
	echo $login;

  class

	class usuario extends conexao {
		
		private $id;
		
		public function login($id){
			$this ->id = $id;
			$pdo = parent::getDB();			
			
			$buscardados=$pdo->prepare("SELECT * FROM usuario WHERE id = :id");
			$buscardados->bindValue(":id", $this->getid() );
			$buscardados->execute();		
		
			return $buscardados->fetchall(PDO::FETCH_OBJ) or die(print_r($query->errorInfo(), true));;
		}
		public function setid($id){
			$this->id = $id;			
		}
		public function getid(){
			return $this -> id;	
			
		}

		
	}

Share this post


Link to post
Share on other sites

Tem que haver algo diferente, pois tanto fetchAll quanto die não retornam o valor bool(true). Os únicos resultados que podem ser retornados é um array (que pode ou não ser vazio) ou bool(false).

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 eduardodsilvaq
      $cmd = $pdo->prepare("SELECT * FROM tabela limit :inicio , :final"); $cmd->bindValue(":inicio",$inicio); $cmd->bindValue(":final",$final); O problema esta na primeira linha, pois se substituir :inicio e :final pelas suas variáveis a pesquisa acontece corretamente.
       
      Alguma solução?
    • By eduardodsilvaq
      $cmd = $pdo->prepare("SELECT * FROM tabela limit :inicio , :final"); $cmd->bindValue(":inicio",$inicio); $cmd->bindValue(":final",$final); O problema esta na primeira linha, pois se substituir :inicio e :final pelas suas variáveis a pesquisa acontece corretamente.
       
      Alguma solução?
    • By mamotinho
      Boa noite! estou com dúvidas em relação a array, eu tenho uma procedure no SQL Server e essa procedure exibe uma lista de resultados, eu gostaria de pega o valor desses resultados e lista em um array para eu comparar com outro valor que vai ser selecionado em um select , tipo abaixo:
       
      $arraySelect = $db->prepare(exec WebSite.dbo.server_value_product 2);
      $arraySelect->execute();
      $arrayExemple = $arraySelect->fetchAll();

      procedure_list = array($arrayExemple);
       
      !in_array($valorSelect, $procedure_list){
         echo 'O Valor selecionado não existe nos resultados da procedure';
      }
       
       
      alguem sabe como posso listar o resultado da procedure em array. e sabe se o valor que procuro está entre os resultados da array.
    • By Matheus Bispo
      Saudações colegas, estou com um problema aqui, que está difícil de resolver, estou criando um login, utilizando PHP POO+PDO, acontece que já tentei de tudo quanto é jeito e não consigo passar deste problema.
       
      Vamos lá, primeiro o meu index.php

                    <input type="email" name="usu_email" id="usu_email" class="form-control"
                    placeholder="email@email.com" required="true" autofocus>
                    <br>
                    <label for="inputPassword">Senha</label>
                      <input type="password"  name="usu_senha" id="usu_senha" class="form-control"
                      placeholder="*******" required="true"><br>
                      <?php
                      $Dados = filter_input_array(INPUT_POST, FILTER_DEFAULT);
                      if(!empty($Dados['btnEnviar'])) {
                          unset($Dados['btnEnviar']);
                          $ChamarUsuario = new Usuario();
                          $ChamarUsuario->logar($Dados['usu_email'], $Dados['usu_senha']);
                          echo $ChamarUsuario->getMsg();
                          var_dump($Dados);
                      }
                      else{
                      }
                      ?>  
       
      Na minha class Usuario
       
          public function logar($Email, $Senha)
          {
              $this->Email = $Email;
              $this->Senha = $Senha;
              $this->verificarEmail();
          }
       
      private function verificarEmail(){
              $Visualizar = new Read();
              $Visualizar->ExeRead('usuarios', 'WHERE usu_email = :usu_email LIMIT :limit', "usu_email={$this->Email}&limit=1");
              if($Visualizar->getResultado()):
                  $this->verificarSenha();   
              else:
                  $this->Resultado = false;
                  $this->Msg = "<div class='alert alert-danger'>Email não existente!</div>";
              endif;
          }
       
      E na minha class Read está assim:
       
      class Read extends Conn
      {
          private $Select;
          private $Values;
          private $Resultado;
          private $Msg;
          private $Query;
          private $Conn;
          public function ExeRead($Tabela, $Termos = null, $ParseString = null)
          {
              if(!empty($ParseString)):
                  parse_str($ParseString, $this->Values);
              endif;
              $this->Select = "SELECT * FROM {$Tabela} {$Termos}";
          }
          public function getResultado()
          {
              return $this->Resultado;
          }
          public function getMsg()
          {
              return $this->Msg;
          }
          public function getRowCount()
          {
              return $this->Query->rowCount();
          }
          private function conexao()
          {
              $this->Conn = parent::getConn();
              $this->Query = $this->Conn->prepare($this->Select);
              $this->Query->setFetchMode(PDO::FETCH_ASSOC);
          }
          private function getInstrucao()
          {
              if ($this->Values):
                  foreach ($this->Values as $Link => $Valor):
                      if ($Link == 'limit' || $Link == 'offset'):
                          $Valor = (int) $Valor;
                      endif;
                      $this->Query->bindValue(":{$Link}", $Valor, ( is_int($Valor) ? PDO::PARAM_INT : PDO::PARAM_STR));
                  endforeach;
              endif;
          }
          private function ExecutarInstrucao()
          {
              $this->Conexao();
              try
              {
                  $this->getInstrucao();
                  $this->Query->execute();
                  $this->Resultado = $this->Query->fetchAll();
              }
              catch (PDOException $e)
              {
                  $this->Resultado = null;
                  return "<b>Erro ao Ler:</b> {$e->getMessage()}";
              }
          }
      }
       
      Sempre retorna que meu email não existe, mas este email está gravado no banco... O que poderia estar errado?
       
    • By rogarfil
      function getAssuntos() {     $pdo = Connection::getInstance();     $sql = "SELECT DISTINCT DATE_FORMAT(created, '%Y %m') AS data FROM minha_tabela ORDER BY data DESC LIMIT 12";   try {         $stmt = $pdo->prepare($sql);         $stmt->execute();         $contar = $stmt->rowCount();         if($contar > 0 ) {             while($blog = $stmt->fetch(PDO::FETCH_OBJ)) {                 $anoMes  = $blog->data;                 $mesAno = explode(" ", $anoMes);                 switch ($mesAno[1]):                   case "01":    $mes = 'Janeiro';     break;                   case "02":    $mes = 'Fevereiro';   break;                   case "03":    $mes = 'Março';       break;                   case "04":    $mes = 'Abril';       break;                   case "05":    $mes = 'Maio';        break;                   case "06":    $mes = 'Junho';       break;                   case "07":    $mes = 'Julho';       break;                   case "08":    $mes = 'Agosto';      break;                   case "09":    $mes = 'Setembro';    break;                   case "10":    $mes = 'Outubro';     break;                   case "11":    $mes = 'Novembro';    break;                   case "12":    $mes = 'Dezembro';    break;                 endswitch; ?> <ol class="list-unstyled mb-0">   <li><a href="#">       <?php       echo $mes." ".$mesAno[0];       ?>   </a></li> </ol> <?php         }//while       } else {         echo '<li>Não existe <strong>ASSUNTOS CADASTRADOS</strong></li>';       }   } catch(PDOException $e) { $e->getMessage(); } }  
×

Important Information

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