PHP,PDO,MySQL,注意:尝试获取非对象的属性

时间:2014-11-24 05:28:11

标签: php mysql pdo

我仍然试图绕过php,所以很抱歉,如果这是一个简单的错误(我已经搜索了很长一段时间,只能设法得到不同的错误,如“未定义的索引”)

我正在尝试做的是有一个从表中获取数据的函数(目前它不包含很多内容,但最终会包含每个主要网页的所有内容)。它应该带一个id,然后为该页面提供正确的模板和内容(现在只需硬编码$ pageName,直到我开始工作)

在我的Page类中我有这个

class Page{

public $pageid = null;
public $pagetemplate = null;
public $pagetitle = null;
public $pagebody = null;

public function __construct($data=array()){
    if(isset($data['page_id'])) $this->pageid = (int) $data['page_id'];
    if(isset($data['page_template'])) $this->pagetemplate = (string) $data['page_template'];
    if(isset($data['page_title'])) $this->pagetitle = (string) $data['page_title'];
    if(isset($data['page_body'])) $this->pagebody = (string) $data['page_body'];
}

public static function getPageData($pageName){
    $conn = new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD);
    $sql = "SELECT  page_template, page_title, page_body FROM pages WHERE page_id = :page_id LIMIT 1";
    $stmt = $conn->prepare($sql);
    $stmt->bindParam(':page_id', $pageName);
    $stmt->execute();
    $list = array();
    while($row = $stmt->fetch()){
        //$pageslug = $row['page_slug'];
        $page = new Page($row);
        $list[] = $page;

    }

    $conn = null;
    return(array("results" => $list));
}

}

然后在我的索引中我有

function homepage(){
    $results = array();
    $data = Page::getPageData(1);
    $results['pages'] = $data['results'];
    $template = $results['pages']->pagetemplate;
    require($template);
}

使用switch case调用主页函数,但我稍后会更改它,以便导航栏更改给getPageData赋予的值,这应该是加载不同页面的方式。无论如何,我收到以下错误:

注意:尝试在第48行的C:\ xampp \ htdocs \ index.php中获取非对象的属性

警告:require():第49行的C:\ xampp \ htdocs \ index.php中的文件名不能为空

致命错误:require():在第49行的C:\ xampp \ htdocs \ index.php中打开所需的''(include_path ='。; C:\ xampp \ php \ PEAR')失败

2 个答案:

答案 0 :(得分:0)

更改您的功能以返回array(Page)而不是array(array(Page))

$list = null;
while($row = $stmt->fetch()){
    $page = new Page($row);
    $list = $page;
}

此外,添加额外检查查询结果以返回

答案 1 :(得分:0)

您的getPageData()方法会在'结果'处返回数字索引数组。索引,而不是对象。这意味着$ results [' pages']包含一个数字索引数组,而不是一个对象。 var_dump()它并检查出来。

您可能需要执行以下操作:

$template = $results['pages'][0]->pagetemplate;