致命错误:在第 39 行调用非对象 dataLayer 上的成员函数 query(.php)


Fatal error: Call to a member function query() on a non-object dataLayer.php on line 39

这段代码在我的类Testing中。

class Testing {
    // irrelevant code
     private $dbh; 
     function connect(){
        try{
            $dbh = new PDO("mysql:host=127.0.0.1;port=3306;dbname=database", "username", "password");
            $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
            $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            print "Connected to MYSQL<br/><br/>";
            return true;
        }
        catch(PDOException $e){
            return false;
        }
    }
    function setData($sql){
        try{
            $stmt = $dbh->query($sql); // Line 39
            if($stmt == null){
                return false;
            }
            else{
                return true; 
            }
        }
        catch(PDOException $e){
            $e->getMessage();
        }
    }
    function getData($sql){
        if(!setData($sql)){
            print "SQL statment is null<br/><br/>";
        }
        else{
            try{
                foreach ($dbh->query($sql) as $row) {
                    # code...
                    print "<p>".$row['fName']. ' '. $row['lName']. ' ' .$row['email']. "</p>";
                }
            }
            catch(PDOException $Exception){
                $Exception->getMessage();
            }
        }
    }
    // more irrelevant code
}

然后我在index.php中调用getData((:

<?php
    require_once "dataLayer.php";
    $x = new Testing(); 
    $x-> connect();
    $x->getData("SELECT * FROM faculty");
?>

知道这段代码有什么问题吗?语法有问题吗?

现在我明白问题出在哪里了。当您在getData()中调用setData()时,会发生这种情况。
由于您将setData()定义为同一类的方法,因此您应该从类内部调用它。所以改变

function getData($sql){
    if(!setData($sql)){

function getData($sql){
    if(!$this->setData($sql)){

注意:将来请发布完整的错误消息(包括行号(并标记发生错误的行(请参阅我对你的帖子的编辑(,以及一些(相关(代码,这些代码会建议这些函数被定义为类方法。