使用mysql对象返回公共模型变量

时间:2012-01-04 11:18:36

标签: php mysql

型号:

class News
{
    public $title;
    public $article;
    public $date;
    public $published;
    public $publisher;
    public $image;

    public static function getSingleArticle($id)
    {
        $query="SELECT *, date_format(date, '%D %M %Y') AS uk_date FROM news WHERE id=$id";
        return mysql_query($query);
    }
}

控制器:

public function editAction()
{
    $row=News::getSingleArticle($_GET['id']);

    $model=mysql_fetch_object($row);

    include('application/view/admin/includes/header.php');
    include('application/view/admin/news/update.php');
    include('application/view/admin/includes/footer.php');
}

在我看来,有一个表单可以显示<?php echo $model->title; ?>

等属性

在我的数据库表中,字段publisher和image不存在,因此我收到“undefined property:stdClass”错误。但是,我需要将这些字段保留在视图中以备将来使用。每当我调用模型时,如何将公共模型变量引入模型对象的一部分? (在这种情况下,我希望它们只返回一个空值)

2 个答案:

答案 0 :(得分:2)

这不是完美的模型类,但我认为它接近你的同时提供了更直接的界面价值:

class News
{
    public $title;
    public $article;
    public $date;
    public $published;
    public $publisher;
    public $image;

    public function getSingleArticleRow($id)
    {
        $query = "SELECT *, date_format(date, '%D %M %Y') AS uk_date FROM news WHERE id=$id";
        return mysql_query($query);
    }

    public function loadSingleArticle($id)
    {
        $obj = mysql_fetch_object($this->getSingleArticleRow($id));
        foreach($obj as $key => $value)
            $this->{$key} = $value;
    }
}

控制器:

public function editAction()
{
    $model = new News();
    $model->loadSingleArticle($_GET['id']);

    include('application/view/admin/includes/header.php');
    include('application/view/admin/news/update.php');
    include('application/view/admin/includes/footer.php');
}

但是你应该真正研究PDO,因为它允许更具体地从数据库中获取对象并且更加简化。

还使用参数化查询,因为SQL注入可用作内置功能,可通过$id参数动态扩展SQL。我假设你不想那样。

答案 1 :(得分:2)

mysql_fetch_object返回stdClass的实例;你期待一个新闻实例。字段“title”在News中定义,而不是在stdClass中定义。

@hakre给出的代码可以帮到你。