2017-03-17 13 views
0

実際に何がコードに間違っているのかを理解するためにあらゆることをしましたが、このエラーの原因を突き止めることはできませんでした。以下は nullのメンバ関数を呼び出しますか?

は、クラス Topicと呼ばれる:

致命的なエラー:

class Topic { 

     // Init DB variables 
     private $db; 

     /* 
     * Constructor 
     */ 
     public function __contruct() { 
      $this->db = new Database(); 

     } 

     /* 
     * Get All Topics 
     */ 
     public function getAllTopics() { 

      $this->db->query("SELECT topics.*, users.username, 
           users.avatar, categories.name 
           FROM topics 
           INNER JOIN users 
           ON topics.user_id = users.id 
           INNER JOIN categories 
           ON topics.category_id = categories.id 
           ORDER BY create_date DESC"); 


      // Assign the results 
      $results = $this->db->resultset(); 

      return $results; 
     } 
    } 

私はクラスTopicのオブジェクトを作成し、

$topic = new Topic(); 
$results = $topic->getAllTopics(); 

常にこのような誤りがあります:メンバー関数query()への呼び出し

Databaseクラスが完璧に働いているライン上の /Applications/XAMPP/xamppfiles/htdocs/forumproject/libraries/Topic.php におけるn個のヌル25すなわちます$ this-> DB->クエリ(...)私はそのクラスのテストを独立して実行しているので、問題はありません。ここで

は、Databaseクラスです:

<?php 

    /* 
    * Using PDO for the first time in my life. 
    */ 

    class Database { 

     private $host = DB_HOST; 
     private $user = DB_USER; 
     private $pass = DB_PASS; 
     private $dbname = DB_NAME; 

     private $dbh; 
     private $error; 
     private $stmt; 

     public function __construct() { 
      // Set DSN 
      $dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->dbname; 

      // Set options 
      $options = array(
       PDO::ATTR_PERSISTENT => true, 
       PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION 
      ); 

      // Create a new PDO instance 
      try { 
       $this->dbh = new PDO($dsn, $this->user, $this->pass, $options); 
      } 
      // Catch the errors using exceptions handler 
      catch(PDOException $e){ 
       $this->error = $e->getMessage(); 
      } 
     } 

     public function query($query){ 
      $this->stmt = $this->dbh->prepare($query); 
     } 

     public function bind($param, $value, $type = null){ 
      if(isnull($type)){ 
       switch(true){ 
        case is_int($value): 
         $type = PDO::PARAM_INT; 
         break; 

        case is_bool($value): 
         $type = PDO::PARAM_BOOL; 
         break; 

        case is_null($value): 
         $type = PDO::PARAM_NULL; 
         break; 

        default : 
         $type = PDO::PARAM_STR; 
       } 
      } 

      $this->stmt->bindValue($param, $value, $type); 
     } 


     public function execute(){ 
      return $this->stmt->execute(); 
     } 

     public function resultset(){ 
      $this->execute(); 
      return $this->stmt->fetchAll(PDO::FETCH_OBJ); 
     } 

     public function single(){ 
      $this->execute(); 
      return $this->stmt->fetch(PDO::FETCH_OBJ); 
     } 

     public function rowCount(){ 
      return $this->stmt->rowCount(); 
     } 

     public function lastInsertId(){ 
      return $this->dbh->lastInsertId(); 
     } 

     public function beginTransaction(){ 
      return $this->dbh->beginTransaction(); 
     } 

     public function endTransaction(){ 
      return $this->bbh->commit(); 
     } 

     public function cancelTransaction(){ 
      return $this->dbh->rollBack(); 
     } 


    } 

?> 
+0

'Database'クラスは同じファイルにありますか?そうでなければ、 'include '/' require'する必要があります。 –

+0

これは完全なトピックファイルですか?致命的なエラーは、25行目で示唆されています。ここでは、問合せ関数が行番号19で呼び出されています。 –

+0

@TomUddingはい私はそれを含めました。 – manjula

答えて

7

あなたはpublic function __contruct()のタイプミスを持って、それがpublic function __construct() {する必要があります(あなたはSが欠落している)

+2

私は今私がどのように感じているかを説明する言葉はありません。私は本当に恥じています。一方、あなたに本当に感謝しています。私は過去3時間以来これに固執しています。 – manjula

+1

心配しないでください、それはたくさん起こります;) – gmc

-2

私は同じ問題がありました。どのようにカスタムpermalinkのプラグインに起因する問題でした。

DELETE FROM wp_postmeta where meta_key = 'custom_permalink' AND meta_value LIKE '%url_against_issue%';

、私は

UPDATEがID = 78 SET POST_NAME = 'url_against_issue' をwp_posts更新。 //注:78は「url_against_issue」ページのIDです。

この問題は修正されています。