2014-06-27 2 views
-2

Я получаю эту ошибку, и у меня нет идеи, как ее исправить ... В начале я были дополнительно ошибки (той же линии), что «дБ» неизвестна, но я был в состоянии исправить его, используя правильный синтаксис с «$ this-> дб ...»Невозможно исправить: «Неустранимая ошибка: вызов функции-члена prepare() для не-объекта ..»

Fatal error: Call to a member function prepare() on a non-object in C:\xampp\htdocs\Gaestebuch\guestbook1.php on line 17

линия 17:

$stmt = $this->db->prepare($query);

0:

include_once("datenbank.php");
class Guestbook {

public $db; 

    public function getEntries(){ 
     $result = false; 
     $query = 'SELECT * FROM guestbook ORDER BY id DESC'; 

      $stmt = $this->db->prepare($query); //error in this line (17)        

      $stmt->execute();            
      $stmt->bind_result($id, $name, $message, $time, $date, $ip);  
       while($stmt->fetch()) {         
        $result[] = array('message' => $message, 
           'name' => $name, 
           'id' => $id, 
           'date' => $date, 
           'time' => $time); 
       } 
       $stmt->close();            
       return $result; 

    } 
} 

База-соединение, которое включено в самом начале выглядит следующим образом:

 $db = new mysqli('localhost', 'root', '', 'guestbook'); 

     if (mysqli_connect_errno()) { 
      printf("Verbindung fehlgeschlagen: %s\n",mysqli_connect_error()); 
      exit(); 
     } 

Я надеюсь, что кто-то может мне помочь устранить эту ошибку (надеюсь, легко Peasy).

+2

Вы переменная класса $ db не определена. Включенный файл не влияет на него. Постскриптум Это очень плохой дизайн ... – Phantom

+0

$ this-> db не равен $ db в соединении с базой данных. – Jonast92

ответ

1

У вас есть этот класс:

class Guestbook { 
    public $db; 

Вы никогда не даете $db свойству значение, поэтому, когда вы делаете

$this->db->prepare($query); 

Вы в основном делают

null->prepare($query); 

Дайте $db значение в конструкторе класса (или убедитесь, что оно каким-то образом передано в класс, в любом случае ..), и все будет хорошо.

$db = new mysqli('localhost', 'root', '', 'guestbook'); 

В соединении с базой данных не имеет никакого отношения к $db переменной в классе, если не передать его в класс или сделать базы данных инициализации произойдет в классе.