2012-01-04 45 views
0

型號:返回公共模型變量與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; ?>

以我數據庫表中的形式,發佈者和圖片字段不存在,所以我得到一個「未定義的屬性:stdClass」錯誤。不過,我需要將這些字段保留在視圖中供將來使用。每當我調用模型時,如何將公共模型變量引入模型對象? (在這種情況下,我想他們只是返回空值)

回答

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。我假設你不想要那樣。

2

mysql_fetch_object返回stdClass的一個實例;您期待新聞的一個實例。字段「title」在News中定義,而不在stdClass中定義。

@hakre給出的代碼應該對你有幫助。