【问题标题】:Fatal error: Call to a member function query() on a non-object dataLayer.php on line 39致命错误:在第 39 行调用非对象 dataLayer.php 上的成员函数 query()
【发布时间】:2015-02-15 15:22:26
【问题描述】:

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

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

【问题讨论】:

  • 这段代码是否可能存在于类中?
  • 你在哪里(哪个文件)定义了你的函数?你从哪里调用它(哪个文件)?
  • Deceze,是的,这段代码在一个类中。
  • @Havelock,我在你问我的其他文件中添加了代码。

标签: php database pdo


【解决方案1】:

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

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

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

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

【讨论】:

  • 谢谢,它可以工作,但是我收到另一条错误消息,它说:“致命错误:在 /Volumes/Students/students/135 中的非对象上调用成员函数 query() /pju2173/Sites/DB_PDO/dataLayer.php 第 37 行"
  • 如果$dbh 变量已在构造函数或其他方法中设置(?),那么您可能应该使用$this-&gt;dbh 而不是$dbh。只是一个疯狂的猜测......
猜你喜欢
  • 1970-01-01
  • 2014-02-10
  • 2015-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-09
相关资源
最近更新 更多