Announcement

Collapse
No announcement yet.

Fehler "call to a member function fetch() on a non-object"

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Fehler "call to a member function fetch() on a non-object"

    Hallo zusammen,

    vielleicht sehe ich wieder den Wald vor Bäumen nicht. Ich habe anhand von Beispielen und Tutorials im Intrenet folgendes zusammengebaut:

    PHP Code:
    class Core
    {
        public 
    $dbh;
        private static 
    $instance;

        private function 
    __construct()
        {
            
    $dsn 'mysql:host='DB_SERVER .';dbname='DB_NAME .';connect_timeout=15';
            
    $user       DB_USER;
            
    $password   DB_PASS;

            try
            {
                
    $this->dbh = new PDO($dsn$user$password, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"));
            }
            catch(
    PDOException $e)
            {
                die(
    "Verbindung fehlgeschlagen.");
            }
        }

        public static function 
    getInstance()
        {
            if (!isset(
    self::$instance))
            {
                
    $object __CLASS__;
                
    self::$instance = new $object;
            }
            return 
    self::$instance;
        }

    }


    class 
    SQLmy
    {
        
    ## Mehrere Datensätze holen
        
    function fetch_all($sql)
        {
            
    $core Core::getInstance();
            
    $stmt $core->dbh->query($sql);
            
    $data = array();
            while(
    $row  $stmt->fetch(PDO::FETCH_ASSOC)) {
                
    $data[] = $row;
            }
            return 
    $data;
        }

        
    ## Einen Datensatz holen
        
    function fetch_one($sql)
        {
            
    $core Core::getInstance();
            
    $stmt $core->dbh->query($sql);
            
    $row  $stmt->fetch(PDO::FETCH_ASSOC);
            return 
    $row;
        }

        
    ## Anzahl der Datensätze
        
    function count_row($sql) {
            
    $core Core::getInstance();
            
    $stmt $core->dbh->query($sql);
            
    $row  $stmt->rowCount();
            return 
    $row;
        }

        
    ## SQL nur ausführen
        
    function execute_sql($sql) {
            
    $core Core::getInstance();
            
    $stmt $core->dbh->exec($sql);
            return 
    $stmt;
        }
    }

    class 
    Navi extends SQLmy
    {
        public function 
    navigation()
        {
            
    $sql            "select bezeichnung, gruppen_id, nummer from dbo_gruppen where parent = 0 and gruppen_shop = 1 order by pos";
            
    $res            $this->fetch_all($sql);
            return 
    $res;
        }

    Wennich jetzt die Funktion navigation() aufrufe bekomme ich folgende Fehlermeldung:

    call to a member function fetch() on a non-object

    Kann mir jemand sagen warum? Gibt es eine andere Lösung?

    Gruß René

  • #2
    Wo wird die Klasse Navi angelegt?
    Christian

    Comment


    • #3
      Hallo Christian,

      die Klasse wird in der index.php aufgerufen:

      $Navi = NEW Navi();

      Dieser Inhalt wird in der index.php dann aufgerufen:
      PHP Code:

      <?php

      $arr_navi   
      $Navi->navigation();

      echo 
      '
      <div id="navi_main_box">
          <div id="navi_sub_box">'
      ;

          foreach(
      $arr_navi as $value)
          {
              echo 
      '<div id="navi_main_text" class="naviButton f20LightGrayBold">'.$value['bezeichnung'].'</div>';
          }

      echo 
      '
          </div>
          <div id="sub_navi" class="sub_navi"></div>
      </div>
      <div class="clear"></div>'
      ;

      ?>

      Comment


      • #4
        Versuche es mit

        $res = fetch_all($sql);
        Christian

        Comment


        • #5
          geht auch nicht...

          Comment


          • #6
            Tausch mal das
            PHP Code:
            $stmt $core->dbh->query($sql); 
            gegen das
            PHP Code:
            $stmt $core->dbh->prepare($sql); 
            PDO::query gibt nicht das zurück, was PDO::fetch() erwartet, PDO:: prepare hingegen schon.

            Als Anmerkung: den charset sollte man heute über den DSN mitgeben.
            Weitere Informationen findest Du evtl. hier: http://www.php-rocks.de/thema/49-ein...tatements.html
            PHP rocks!
            Eine Initiative der PHP Community

            Comment

            Working...
            X