Ir para conteúdo
Kelen Miranda Silva

POO e PDO

Recommended Posts

Olá pessoal. Estou aprendendo PDO e POO. Estou para fins de estudo, migrando um sistema meu procedural para POO. E obvio, recebendo varios erros e pesquisando muito. O erro da vez é este:

Fatal error: Call to undefined method PDO::getMenu() in C:\xampp\htdocs\admacuco10\includes\sidebar.php on line 47

Na linha 47 tenho o seguinte:

...
<ul class="sidebar-menu">
			<li class="header">MAIN NAVIGATION</li>
			
			<?php 
				require_once("model/dbconn.php");
				require_once("model/sql.php");
				
				$query = dbconn::getInstance(); 
				$data = $query->getMenu(); //Linha 47
				$key = $data[1]; 
				foreach($key as $menu) 
				{
					?>
  ...Continua

Agora segue a classe que contém o getMenu

<?php
class sql extends dbconn {
	
	public static $instance;

    private function __construct() 
		{
			//
		}

    public static function getInstance() 
		{
			if (!isset(self::$instance))
            self::$instance = new sql();

			return self::$instance;
		}
	
	
	public function getMenu()  // Este aqui
		{
		  
           try
           {
            $db="select * from r_menu order by urutan";
            $stmt=dbconn::getInstance()->prepare($sql);
			$stmt->execute();
            $stat[0] = true;
            $stat[1] = $stmt->fetchAll(PDO::FETCH_ASSOC);
            return $stat;
          }
          catch(PDOException $ex)
          {
            $stat[0] = false;
            $stat[1] = $ex->getMessage();
            return $stat;
          }
      }
  
  //Continua...

Partindo da premissa que sou leiga no assunto POO e PDO, dêem uma luz aí. Grata.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Está ocorrendo a troca de objetos.

 

Veja:

$query = dbconn::getInstance(); 

Na linha acima, é bem provável que você esteja retornando uma instância de PDO.

 

E, quando você chama a linha abaixo:

$data = $query->getMenu();

Está chamando a função getMenu do objecto PDO, que não existe. Pois, a função getMenu, está no objeto sql que não foi instanciado.

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.