2017-02-13 5 views
1

Ich habe versucht, das Google Login mit PHP und MongoDB zu implementieren. Immer wenn ich versuche, $manager->executeQuery auszuführen, erhalte ich Fatal Fehler, der besagt, dass es nicht ausgeführt werden kann.Schwerwiegender Fehler: Aufruf einer Memberfunktion executeQuery() auf einem Nicht-Objekt

$cursor = $manager->executeQuery($this->dbName.'.'.$this->userTbl, $prevQuery); 

Ich habe keine Ideen, wie Sie diese Programme debuggen. Hier ist mein Codebeispiel:

class User { 

    private $dbHost  = "localhost:27017"; 
    private $dbName  = "Demo"; 
    private $userTbl = 'google_users'; 


    function __construct(){ 
     //Connecting to MongoDB 
     try { 

      $manager = new MongoDB\Driver\Manager('mongodb://'. $this->dbHost); 
     } 
     catch (MongoDB\Driver\Exception\Exception $e) { 

      echo $e->getMessage(), "\n"; 
     } 
    } 


    function checkUser($userData = array()){ 
     if(!empty($userData)){ 
      //Check whether user data already exists in database 

      $filter = ['oauth_uid' => $userData['oauth_uid'], 'oauth_provider' => $userData['oauth_provider']]; 
      $prevQuery = new MongoDB\Driver\Query($filter); 
      $user_count=0; 

      try { 

       $cursor = $manager->executeQuery($this->dbName.'.'.$this->userTbl, $prevQuery); 

       // Iterate over all matched documents 
       foreach ($cursor as $document) { 
        $user_count++; //will return 0 if user doesn't exist 
       } 

      } catch (MongoDB\Driver\Exception\Exception $e) { 
       echo $e->getMessage(), "\n"; 
      } 
     } 
    } 
} 

Alle Vorschläge würden geschätzt.

+2

Wo '$ Manager' ist in diesem Verfahren definiert verwenden kann? Es sieht nicht so aus – RiggsFolly

Antwort

1

Sie haben vergessen, den $manager im Konstruktor eine Eigenschaft der Klasse erstellt, so dass Sie es überall in der Klasse

class User { 

    private $dbHost  = "localhost:27017"; 
    private $dbName  = "Demo"; 
    private $userTbl = 'google_users'; 


    function __construct(){ 
     //Connecting to MongoDB 
     try { 

      $this->manager = new MongoDB\Driver\Manager('mongodb://'. $this->dbHost); 
     // ^^^^^ make a class property 
     } 
     catch (MongoDB\Driver\Exception\Exception $e) { 

      echo $e->getMessage(), "\n"; 
     } 
    } 


    function checkUser($userData = array()){ 
     if(!empty($userData)){ 
      //Check whether user data already exists in database 

      $filter = ['oauth_uid' => $userData['oauth_uid'], 'oauth_provider' => $userData['oauth_provider']]; 
      $prevQuery = new MongoDB\Driver\Query($filter); 
      $user_count=0; 

      try { 

       $cursor = $this->manager->executeQuery($this->dbName.'.'.$this->userTbl, $prevQuery); 
       //  ^^^^^ reuse the class property 

       // Iterate over all matched documents 
       foreach ($cursor as $document) { 
        $user_count++; //will return 0 if user doesn't exist 
       } 

      } catch (MongoDB\Driver\Exception\Exception $e) { 
       echo $e->getMessage(), "\n"; 
      } 
     } 
    } 
} 
Verwandte Themen