Fatal error: Call to a member function fetch_assoc() on a non-object in...

MsWord

Mitglied
Hallo,

ich habe mir eine Klasse geschrieben.
Ich habe eine neue function in der Klasse erstellt und in dieser kommt immer folgender Fehler:
Fatal error: Call to a member function fetch_assoc() on a non-object in [...]/expand/classes/includer.php on line 74

Wobei ich die nur kopiert habe und die Werte geändert?!

Code:
PHP:
<?php
class includer {
    /**
     * Wert der aus der Spalte "back" ausgelesen werden soll
     *
     * @access    private
     * @var       string
     */
    private $back = NULL;
  
    /**
     * Wert der aus der Spalte "back_css" ausgelesen werden soll
     *
     * @access    private
     * @var       string
     */
    private $back_css = NULL;
  
    /**
     * Wert der aus der Spalte "back_js" ausgelesen werden soll
     *
     * @access    private
     * @var       string
     */
    private $back_js = NULL;
  
    /**
     * Wert der aus der Spalte "edit" ausgelesen werden soll
     *
     * @access    private
     * @var       string
     */
    private $edit = NULL;
  
    /**
     * MySQL Instanz speichern
     *
     * @access    private
     * @var       string
     */
    private $db = NULL;
  
    /**
     * Im Fehlerfall wird hier der Fehler gespeichert
     *
     * @access    private
     * @var       string
     */
    private $error = NULL;
  
    /**
     * Wert festlegen
     *
     * @access    public
     */
    public function __construct($sql = ""){
        if(!empty($sql)){
            $this->db = $sql;
        } else {
            $this->error = 'Kein MySQL Verbindung möglich!';
        }
    }
  
    private function style_loader(){
        $sql     = "Select * From ".Prefix."_styles Where default = '1' Limit 1";
        $result = $this->db->query($sql);
      
        // Prüfen ob ein Fehler aufgetreten ist
        if (!$result) {
            $this->error = 'Etwas stimmte mit dem Query nicht: '.$this->db->error;
        }
      
        // Ausgabe/Rueckgabe des gewuenschten Wertes
        $row = $result->fetch_assoc();
        return $row['folder'];
    }
  
    public function css_includes(){
        $sql     = "Select * From ".Prefix."_css_includes Where active = '1' Order by pos";
        $result = $this->db->query($sql);
      
        // Prüfen ob ein Fehler aufgetreten ist
        if (!$result) {
            $this->error = 'Etwas stimmte mit dem Query nicht: '.$this->db->error;
        }
      
        while($row = $result->fetch_assoc()){
            $this->edit = str_replace('[href]', $row['href'], $row['html']);
            $this->edit = str_replace('[media]', $row['media'], $this->edit);
            $this->edit = str_replace('{style}', $this->style_loader(), $this->edit);
            $this->back_css .= '    '.$this->edit."\n";
        }
        return $this->back_css;
    }
  
    public function js_includes($footer = 0){
        $sql     = "Select * From ".Prefix."_js_includes Where active = '1' AND footer = '$footer' Order by pos";
        $result = $this->db->query($sql);
      
        // Prüfen ob ein Fehler aufgetreten ist
        if (!$result) {
            $this->error = 'Etwas stimmte mit dem Query nicht: '.$this->db->error;
        }
      
        while($row = $result->fetch_assoc()){
            $this->edit = str_replace('[src]', $row['src'], $row['html']);
            $this->edit = str_replace('[content]', $row['content'], $this->edit);
            $this->edit = str_replace('{style}', $this->style_loader(), $this->edit);
            $this->back_js .= '    '.$this->edit."\n";
        }
        return $this->back_js;
    }

    public function metatags_includes(){
        $sql     = "Select * From ".Prefix."_meta_tags Where active = '1'";
        $result = $this->db->query($sql);
      
        // Prüfen ob ein Fehler aufgetreten ist
        if (!$result) {
            $this->error = 'Etwas stimmte mit dem Query nicht: '.$this->db->error;
        }
      
        // Ausgabe/Rueckgabe des gewuenschten Wertes
        while($row = $result->fetch_assoc()){
            $this->edit = str_replace('[value]', $row['value'], $row['html']);
            $this->edit = str_replace('[name]', $row['name'], $this->edit);
            $this->back.= '    '.$this->edit."\n";
        }
        return $this->back;
    }
  
    public function error(){
        if(empty($this->error)){
            return NULL;
        } else {
            return $this->error;
        }
    }
}

?>

Wo habe ich jetzt einen Denkfehler gemacht?
 
In der Funktion style_loader()ntierst du dir zwar, dass etwas falsch ist, brichst aber nicht ab.
$result ist kein Objekt.. Erog ist das SQL fehlgeschlagen.

Du hast dort .Prefix. im String. Was soll Prefix sein?

Zur Fehlersuche ein kleines Tutorial
http://wiki.yaslaw.info/dokuwiki/doku.php/php/tutorials/debugmysqliqueries


Nachtrag:
Ich würde den Paramter im contructor von $sql auf $db umbenennen. $sql ist meistens ein String und kein DB-Objekt.....
 
Prefix ist einfach ein Präfix den man am Anfang festlegt, damit man dieses System mehr mals über ein und die gleiche MySQL-DB laufen lassen kann.
Ist in der config definiert worden.
define('Prefix', 'xyz');

Nehme ich die Funktion raus, funktioniert ja alles, nur sobald ich diese mit rein nehme kommt der Fehler.
 
Nochmals

Dein Fehlerhandling ist falsch. Wenn $result kein Objekt ist, darfst dunicht einfach weitergehen. Im if() solltest du die Funktion verlassen.

Im Moment:
1) SQL kann nicht ausgeführt werden
2) $this->error wird abgefüllt
3) Das Resultat wird ermittelt -> generiert Fehler

Soll:
1) SQL kann nicht ausgeführt werden
2) $this->error wird abgefüllt
3) $this->error anzeigen
4) Funktion verlassen

Und wie du das SQL prüfen kannst, dazu habe ich dir ja ein Tutorial-Link gepostet
 
Oh :oops:
Okay vielen Dank. Habe es so gemacht..
Syntax Fehler ^^
default darf man ja nicht einfach so ohne `` verwenden.
Mit `default` geht das auch jetzt.
Nochmals Danke.
 
Zurück