Jump to content
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.

Share this post


Link to post
Share on other 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.

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.