致命错误:在非对象上调用成员函数executeQuery()

时间:2017-02-13 15:40:52

标签: php mongodb google-api

我尝试使用PHP和MongoDB实现Google登录。每当我尝试执行$manager->executeQuery时,我都会收到Fatal错误,指出它无法执行。

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

我不知道如何调试这个程序。这是我的代码示例:

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";
            }  
        }
    }
}

任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:1)

您忘记将构造函数中创建的1作为类的属性,以便您可以在类中的任何位置使用它

--- One Way to build PJSIP libraries --- test with pjsip 2.6

//Updated for XCode 8. 

Building PJSIP
$ cd /Users/ravimalviya/Developer/Dev2/trunk

//If you want to specify the minimum supported iOS version
//export MIN_IOS="-miphoneos-version-min=8.0"

Compile Library and Build For Default iPhone 4 use armv7 architecture
$ ./configure-iphone && make dep && make clean && make

Build For iPhone 5, use armv7s architecture
$ ARCH='-arch armv7s' ./configure-iphone && make dep && make clean && make

Build For iPhone 5s, use arm64 architecture
$ ARCH='-arch arm64' ./configure-iphone && make dep && make clean && make

Build For Simulator, use i386 architecture
export DEVPATH=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer
ARCH="-arch i386" CFLAGS="-O2 -m32 -mios-simulator-version-min=5.0" LDFLAGS="-O2 -m32 -mios-simulator-version-min=5.0" ./configure-iphone
make dep && make clean && make

Build For Simulator, use x86_64 architecture
export DEVPATH=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer
ARCH="-arch x86_64" CFLAGS="-O2 -m32 -mios-simulator-version-min=5.0" LDFLAGS="-O2 -m32 -mios-simulator-version-min=5.0" ./configure-iphone
make dep && make clean && make

The compilation result
pjlib/lib       
pjlib-util/lib
pjmedia/lib
pjsip/lib
pjnath/lib
third_party/lib
Note add into project..

Combine resulting archtecture(arm64,armv7,armv7s,i386, x86_64) supported library .a file.

//goto directory where you collect all build library. create folder name arm64, armv7s, armv7, i386, x86_64 and put all library respectivly. each having only one arch supported library file.
//rename file in all these 5 folders it's a easy way to make universal library.
//Also create folder named unified where all unversal library will create.

$ export LIB_NAME="libg7221codec.a"
$ lipo -arch armv7 armv7/$LIB_NAME -arch armv7s armv7s/$LIB_NAME -arch arm64 arm64/$LIB_NAME -arch i386 i386/$LIB_NAME -arch x86_64 x86_64/$LIB_NAME -create -output unified/$LIB_NAME

//-arch armv7s armv7s/$LIB_NAME means support armv7s get library from directory armv7s/$LIB_NAME and $LIB_NAME file name that only support armv7s.
//-arch arm64 arm64/$LIB_NAME ............
//-arch armv7 armv7/$LIB_NAME ............
//-arch i386 i386/$LIB_NAME ..............
//-arch x86_64 x86_64/$LIB_NAME ..............
//unified/$LIB_NAME is directory where unversal library will build using lips. with same name $LIB_NAME that export. do it same.

//check which arch you lib is supporting
xcrun -sdk iphoneos lipo -info unified/$LIB_NAME

$ export LIB_NAME="libgsmcodec.a"
$ lipo -arch armv7 armv7/$LIB_NAME -arch armv7s armv7s/$LIB_NAME -arch arm64 arm64/$LIB_NAME -arch i386 i386/$LIB_NAME -arch x86_64 x86_64/$LIB_NAME -create -output unified/$LIB_NAME
$ export LIB_NAME="libilbccodec.a"
$ .....same as above in lipo......
$ export LIB_NAME="libpj.a"
$ .....same as above in lipo......
$ export LIB_NAME="libpjlib-util.a"
$ .....same as above in lipo......
$ export LIB_NAME="libpjmedia-audiodev.a"
$ .....same as above in lipo......
$ export LIB_NAME="libpjmedia-codec.a"
$ .....same as above in lipo......
$ export LIB_NAME="libpjmedia-videodev.a"
$ .....same as above in lipo......
$ export LIB_NAME="libpjmedia.a"
$ .....same as above in lipo......
$ export LIB_NAME="libpjnath.a"
$ .....same as above in lipo......
$ export LIB_NAME="libpjsdp.a"
$ .....same as above in lipo......
$ export LIB_NAME="libpjsip-simple.a"
$ .....same as above in lipo......
$ export LIB_NAME="libpjsip-ua.a"
$ .....same as above in lipo......
$ export LIB_NAME="libpjsip.a"
$ .....same as above in lipo......
$ export LIB_NAME="libpjsua.a"
$ .....same as above in lipo......
$ export LIB_NAME="libpjsua.a"
$ .....same as above in lipo......
$ export LIB_NAME="libpjsua2.a"
$ .....same as above in lipo......
$ export LIB_NAME="libresample.a"
$ .....same as above in lipo......
$ export LIB_NAME="libspeex.a"
$ .....same as above in lipo......
$ export LIB_NAME="libsrtp.a"
$ .....same as above in lipo......
$ export LIB_NAME="libyuv.a"
$ lipo -arch armv7 armv7/$LIB_NAME -arch armv7s armv7s/$LIB_NAME -arch arm64 arm64/$LIB_NAME -arch i386 i386/$LIB_NAME -arch x86_64 x86_64/$LIB_NAME -create -output unified/$LIB_NAME

Note: Unversal libraries you can add into your project and also mention in library search path.

//In order to use the pjsip libraries, we need to include folder that ahve header files that access .a files. Naturally, the header files are located in:
pjlib/include
pjlib-util/include
pjmedia/include
pjnath/include
pjsip/include

Note: do't add into project..buz you can not import like import <pjsip-lib/pjsip.h>
so just place these folder into project directory where ever you want but mention in header search path.

Enjoy (:)