Ir para conteúdo
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"
}

 

Compartilhar este post


Link para o post
Compartilhar em outros 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:

 

Compartilhar este post


Link para o post
Compartilhar em outros 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 ?

Editado por Gabriel Heming
Remover quote desnecessário

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros 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;	
			
		}

		
	}

Compartilhar este post


Link para o post
Compartilhar em outros 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).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por gersonab
      Tenho este sql que funciona normal:
      <?php $idtor = (int)$_GET['id_tor']; $dia = $_GET['dia']; $sql3 = "SELECT * FROM cantos INNER JOIN campeonato ON id_camp = id_campeonato INNER JOIN torneio ON id_tor = id_torneio WHERE data = :dia AND id_torneio = :idtor ORDER BY cantosfim DESC, pontos DESC, cantos DESC"; $stmt = $pdo->prepare($sql3); $stmt->bindParam(':idtor', $idtor); $stmt->bindParam(':dia', $dia); $stmt->execute(); while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { ?> porém este outro não retorna nada, nem erro...
      <?php $idtor = (int)$_GET['id_tor']; $consul = "SELECT id_cantos, id_torneio, id_campeonato, SUM(cantosfim) AS cantfin, SUM(pontos) AS pontfin FROM cantos INNER JOIN campeonato ON id_camp = id_campeonato INNER JOIN torneio ON id_tor = id_torneio WHERE id_tor = :idtor ORDER BY pontfin DESC, cantfin DESC"; $stmt = $pdo->prepare($consul); $stmt->bindValue(':idtor', $idtor); $stmt->execute(); while ($lin = $stmt->fetch(PDO::FETCH_ASSOC)) { ?> não consigo encontrar o erro.
    • Por LukasTrin
      Estou montando um website e gostaria de saber como faço para o usuário que acabou de deslogar ficar na mesma pagina ?
       
      por exemplo, na programação atual, ele clica em " Sair " e vai automaticamente para a index, independente de onde esteja.
      eu gostaria q ele permanecesse na mesma pagina em que estava
       
      programação q faz o mesmo deslogar...
       
      //essa é a navbar.php <li><a href="?sair=sim">Sair</a></li> // Esse é o logado.php if(isset($_GET['sair']) == "sim"){     $objUser->sairUsuario(); } //e esse é o usuarios.class.php public function sairUsuario(){ session_destroy(); header ('location: index.php '); }  
    • Por LuanMartinsTI
      Eu gostaria de saber se existe algum problema relacionado a seguranca criando uma funcao assim, no exemplo sempre que eu crio uma funcao pre reutilizar os dados sao passados direto na chamada da funcao dentro do php, o usuario nao insere nenhum dado, quando o usuario vai inserir dados eu nao trabalho dessa forma, entao minha duvida [e, se mesmo o parametro da funcao sendo informado dentro do php no codigo pode existir algum problema.
      public function contar_cadastro($tabela, $sql){ try { if($sql == null){ $this->Select = $this->Conn->prepare("SELECT * FROM $tabela"); $this->Select->execute(); return $this->Select->rowCount(); }else{ $this->Select = $this->Conn->prepare("SELECT * FROM $tabela". " " ." $sql"); $this->Select->execute(); return $this->Select->rowCount(); } } catch (PDOException $exc) { exibeMensagens($Msg, $ErrNo); } } E as chamadas das funcoes assim
       
      $cmsPDO = new CmsPDO(); $r_userStaff = $cmsPDO->contar_cadastro('usuarios', ' where cargo > 2'); $r_userVip = $cmsPDO->contar_cadastro('usuarios', ' where cargo = 2'); $r_userBan = $cmsPDO->contar_cadastro('usuarios', " where ban = '1'"); $r_usuarioPDO = $cmsPDO->contar_cadastro('usuarios', null); $r_servVip = $cmsPDO->contar_cadastro('servidores', " where vipfree = 'V'"); $r_servFree = $cmsPDO->contar_cadastro('servidores', " where vipfree = 'F'"); $r_servInat = $cmsPDO->contar_cadastro('servidores', " where verificado = '1'"); $r_servOff = $cmsPDO->contar_cadastro('servidores', " where estado = 'Off'"); $r_servOn = $cmsPDO->contar_cadastro('servidores', " where estado = 'On'"); $r_servidores = $cmsPDO->contar_cadastro('servidores', null); Eu normalmente crio as funcoes assim:
      public function cadastrar_usuario($usuario){ try { if($this->veriricarnick($usuario) == false){ if($this->verificiarEmail($usuario) == false){ $query = 'INSERT INTO usuarios ' . '(id, nome, senha, email, cargo, ip)' . 'value(null,:nome, :senha, :email, :cargo, :ip)'; $this->Criar = $this->Conn->prepare($query); $this->Criar->bindValue(':nome' , $usuario->getNome() , PDO::PARAM_STR); $this->Criar->bindValue(':senha' , $usuario->getSenha(), PDO::PARAM_STR); $this->Criar->bindValue(':email' , $usuario->getEmail(), PDO::PARAM_STR); $this->Criar->bindValue(':cargo' , $usuario->getCargo(), PDO::PARAM_INT); $this->Criar->bindValue(':ip' , $usuario->getIp() , PDO::PARAM_STR); $this->Criar->execute(); if($this->Criar->rowCount() == 1){ return 1; }else{ return false; } }else{ return false; } }else{ return false; } } catch (PDOException $exc) { exibeMensagens("<b> Erro ao inserir.</b> Mensagem:{$exc->getMessage()} Código: {$exc->getCode()}", WS_ERROR); } }  
    • Por gersonab
      estou atualizando um código para PDO, o mesmo funciona na versão PHP mais antiga, no PDO não.
      Versão php:
      if ( isset( $_GET['action'] ) ) { $action = $_GET['action']; $action(); } function updateFotoCover() { $id_imovel = $_POST['id_imovel']; $id_img = $_POST['id_img']; mysql_query( "update imagens set prin = 0 where id_imovel = $id_imovel" ); mysql_query( "update imagens set prin = 1 where id_img = $id_img" ); echo 'Cover Atualizado <Br/>'; } function deleteFoto() { $id_img = $_POST['id_img']; $rset = mysql_query( "select * from imagens where id_img = $id_img" ); $linha = mysql_fetch_assoc($rset); $nome = $linha["img"]; unlink("php/files/".$nome); $sql = "DELETE FROM imagens WHERE id_img = $id_img"; $rset = mysql_query($sql); echo 'Foto Removida<Br/>'; } PDO:
      if ( isset( $_GET['action'] ) ) { $action = $_GET['action']; $action(); } function updateFotoCover() { $id_imovel = (int)$_POST['id_imovel']; $id_img = (int)$_POST['id_img']; $sql= "UPDATE imagens SET prin = 0 where id_imovel = :id_imovel"; $stmt = $pdo->prepare($sql); $stmt->bindValue(':id_imovel', $id_imovel, PDO::PARAM_INT); $stmt->execute(); $sql= "UPDATE imagens SET prin = 1 where id_img = :id_img"; $stmt = $pdo->prepare($sql); $stmt->bindValue(':id_img', $id_img, PDO::PARAM_INT); $stmt->execute(); } function deleteFoto() { $id_img = (int)$_POST['id_img']; $sql2 = "SELECT imagens FROM imagens WHERE id_imovel =:idc"; $stmt = $pdo->prepare($sql2); $stmt->bindParam(':idc', $id_img); $stmt->execute(); $aux = $stmt->fetch(PDO::FETCH_ASSOC)); unlink("php/files/".$aux["img"]); $sql3 = "DELETE FROM imagens WHERE id_imovel=:idc"; $stmt = $pdo->prepare($sql3); $stmt->bindParam(':idc', $id_img, PDO::PARAM_INT); $stmt->execute(); } Não encontro o erro.
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.