2014-12-19 34 views
0

我有什麼是在PHP類中實現SQL查詢的最佳方式的問題。我想保持儘可能低的查詢。如何在類中使用sql查詢

這是我第一次嘗試:

class NewsArticle 
{ 
    //attributes 
    private $newsArticleID; 

    //methodes 
    //constructoren 
    public function __construct($newsArticleID) 
    { 
     $this->newsArticleID = $newsArticleID; 
    } 

    //getters 
    public function getGeneralData() 
    { 
     $query = mysql_query("SELECT author, title, content, datetime, tags FROM news WHERE news_id = '$this->newsArticleID'"); 
     $result = mysql_fetch_array($query); 

     $data = array(
      'author' => $result['author'], 
      'title' => $result['title'], 
      'content' => $result['content'], 
      'datetime' => $result['datetime'], 
      'tags' => $result['tags'] 
      ); 

     return $data; 
    } 

    //setters 
} 

現在我知道這將是更好的創造generalData,並對每個項目二傳手我從數據庫中檢索創建一個變量,並指定合適的值。然後我可以爲每個變量創建一個getter。所以這樣。

class NewsArticle 
{ 
    //attributen 
    private $newsArticleID; 
    private $author; 
    private $title; 
    // more variables 

    //methodes 
    //constructoren 
    public function __construct($newsArticleID) 
    { 
     $this->newsArticleID = $newsArticleID; 
    } 

    //getters  
    public function getAuthor() 
    { 
     return $this->author; 
    } 

    public function getTitle() 
    { 
     return $this->title; 
    } 

    //setters 
    public function setGeneralData() 
    { 
     $query = mysql_query("SELECT author, title, content, datetime, tags FROM news WHERE news_id = '$this->newsArticleID'"); 
     $result = mysql_fetch_array($query); 

     $this->author = $result['author']; 
     $this->author = $result['author']; 

     //other variables 
    } 
} 
+0

請停止使用'mysql_ *'函數:http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php – Mave 2014-12-19 09:28:52

+2

歡迎來到SO!在這個主板上,我們修復了不起作用的代碼(錯誤的結果,錯誤等)。如果您只是在尋找如何讓代碼更好的建議,我們的[代碼審查](http://codereview.stackexchange.com/)網站就是適當的地方。 – georg 2014-12-19 09:35:49

+0

應該在http://codereview.stackexchange.com/ – symcbean 2014-12-19 09:40:10

回答

0

使用getter和setter方法的關鍵在於,通過強迫開發者使用這些你可以實現更復雜的訪問機制,例如設定當值設置讓你的類就知道它寫回一個標誌插入到數據庫中(儘管這是一個相當不好的例子,因爲無需通過方法強制訪問即可實現目標)。

BTW

news_id = '$this->newsArticleID' 

數字不應該被引用(打破了優化)和字符串應該在要在查詢中使用的點進行轉義。

+0

感謝您的信息,我將刪除報價。 – Ruben 2014-12-19 10:48:29

0

我的建議是開始使用PHP-PDO和MySQL的存儲過程。雖然在php代碼中使用直接查詢和使用存儲過程(差別爲幾毫秒)時您會看到一個小的時間差異,但您將使用較少的代碼在php中編寫代碼。以我的觀點,你會有更平衡的應用程序。還可以使用getData和setData函數,它們應該以數組或者json的形式返回任何你想要的東西(我想如果你想使用瀏覽器的本地存儲,你會發現這很有趣)。

+0

感謝您的信息。 – Ruben 2014-12-19 10:49:24