【问题标题】:PHP, PDO, MySQL, Notice: Trying to get property of non-objectPHP,PDO,MySQL,注意:试图获取非对象的属性
【发布时间】:2017-03-04 04:11:55
【问题描述】:

我仍在努力解决 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(): Failed opening required '' (include_path='.;C:\xampp\php\PEAR') in C:\xampp\htdocs\index.php 第 49 行

【问题讨论】:

  • 那么,48 行在哪里?
  • 对不起,48 是 $template = $results['pages']->pagetemplate;还更新了第一篇文章以显示所有 Page 类

标签: php mysql pdo


【解决方案1】:

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

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

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

【讨论】:

  • 我认为你是正确的,它作为 array(0) { } 但是建议的修复只是给出了一个额外的 Undefined offset: 0 错误。您如何建议让 getPageData 改为返回一个对象?
  • @p3tch 对于初学者,为什么要在循环中检索记录并将它们放入数组中?你只是读出一条记录。我确实认为从函数调用中只返回 Page 对象是有意义的。我的意思是,为什么将它放在一堆数组包装器中?你从中得到了什么?
【解决方案2】:

更改您的函数以返回 array(Page) 而不是 array(array(Page))

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

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

【讨论】:

  • 不,仍然出现相同的错误(除非我需要在其他地方进行更改?)
猜你喜欢
  • 1970-01-01
  • 2013-03-05
  • 1970-01-01
  • 2018-11-22
相关资源
最近更新 更多