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

时间:2014-12-17 06:21:44

标签: php database pdo

此代码在我的班级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");
?>

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

1 个答案:

答案 0 :(得分:0)

现在我看到问题所在。当您在setData()中呼叫getData()时会发生这种情况 由于您将setData()定义为同一个类的方法,因此您应该从类中调用它。所以改变

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

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

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