2012-06-12 45 views
1

這是我第一次製作一個PHP應用程序,它會讓很多用戶訪問它,所以之前我不必擔心加載速度,現在我就做。處理來自查詢/多個查詢的多個結果時的最佳實踐?

這些是我曾經想過這樣做的方式,但他們似乎都有點「黑客」,我相信還有更好的辦法。

對於索引頁,我可以有這樣的:

<h1><?php $job->getTitle($id); ?></h1> 
<p><?php $job->getDescription($id); ?></p> 
<p><?php $job->getSomethingElse($id); ?></p> 

和類爲:

function getTitle($id) { 
    $query = "SELECT title FROM table WHERE id = $id"; 
    $result = $db->query($query); 

    $row = $result->fetch_array(MYSQLI_ASSOC); 
    echo $row['title']; 
} 

function getDescription($id) { 
    $query = "SELECT description FROM table WHERE id = $id"; 
    $result = $db->query($query); 

    $row = $result->fetch_array(MYSQLI_ASSOC); 
    echo $row['description']; 
} 

等等

或者,我可以有一個函數,調用所有的結果到一個數組。將它們存儲爲字符串,並根據需要將它們爆炸。

我的其他想法與上面類似,除了我在課堂上做了所有事情並且回顯了html。

速度輸出我想要什麼是最好的方式?

+0

如果有可能嘗試從數據庫中獲取的所有數據一次! – undone

+0

這就是我的想法,我只是不確定最好的方法,並想表明我會想到我所有的選擇。我對OOP的瞭解來自Java,並且從來沒有將它用於數據庫連接。所以把它與我有限的程序PHP知識混合在一起。 請投票的人請解釋原因。我試圖遵循關於提問的規則。 在問候的答案,他們看起來都像他們會很好的工作我想我會給他們所有的嘗試和標記後,一個最好的答案。 –

回答

2

梓,你可曾聽過有關MVC(模型 - 視圖 - 控制器)設計模式?

儘管我不希望你重寫整個你的應用程序,但你仍然可以習慣使用模型...通過這種方式(以非常簡單的方式)你可以創建一個class Model,它有一個__construct($id)方法來查詢數據庫加載所有必要的數據並將它們存儲在私有/ publi /受保護的(任何使您感覺良好的)屬性中。

然後調用上的模型,只有返回它的屬性值,這些getXYZ()方法...

像這樣:

類文章{ 私人$稱號; private $ description; private $ somethingElse;

public function __construct($id) { 
     $query = "SELECT title, description, somethingElse FROM table WHERE id = $id"; 
     $result = $db->query($query); 

     $row = $result->fetch_array(MYSQLI_ASSOC); 
     $this->title = $row['title']; 
     $this->description = $row['description']; 
     $this->somethingElse = $row['somethingElse']; 
    } 

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

    public function getDescription() { 
     return $this->description; 
    } 

    public function getSomethingElse() { 
     return $this->somethingElse; 
    } 

就是這樣......只是一個查詢來檢索所有的數據...

在你想也可以編輯這個模型還可以創建一個setXYZ($value)方法,將設置$this->XYZ = $value;save()方法,將在數據庫中更新這非常具體的行的情況下...

這些方法(獲得並設置)被稱爲getter和setter ...

+0

選擇全部而不僅僅是你需要的列不是不好的做法嗎? –

+0

@AlexL是的,是的,我只是證明了getter方法,而不是查詢本身...但我會改變它:-) – shadyyx

+0

這工作完美感謝。我會投票,但我的問題已被拒絕。如果我獲得了聲譽,我會回來投票。 –

2

我認爲其更好地執行查詢的一個時間。所以獲取所有的細節,你想要什麼,並使用它,只要你想

function getDetails($id){ 
    $query = "SELECT title,description FROM table WHERE id = $id"; 
    $result = $db->query($query); 

    return $result->fetch_array(MYSQLI_ASSOC); 

} 

而且你可以像使用

<?php $details = $job->getDetails($id); ?> 
<h1><?php echo $details['title']; ?></h1> 
<p><?php echo $details['description']; ?></p> 

我不知道更多關於這個......

2

爲每個屬性做一個getter和setter,運行1個查詢,設置所有變量並使用getters獲取實際值。

像這樣的東西應該工作:

private $name; 
    private $street; 
    private $number; 

    public function setName($name) 
    { 
     $this->name = $name; 
    } 

    public function getName() 
    { 
     return $this->name; 
    } 

    public function setNumber($number) 
    { 
     $this->number = $number; 
    } 

    public function getNumber() 
    { 
     return $this->number; 
    } 

    public function setStreet($street) 
    { 
     $this->street = $street; 
    } 

    public function getStreet() 
    { 
     return $this->street; 
    } 


    public function getUser() 
    { 
     $query = "SELECT * FROM users WHERE x = y"; 

     $this->setName($result['name']); 
     $this->setStreet($result['street']); 
     $this->setName($result['number']); 

    } 
+0

或使用神奇的方法...節省大量的打字! – ManseUK

+0

不保存任何輸入。如果你使用體面的IDE,那幾乎沒有任何工作。我在10秒內生成所有getter和setter。魔術獲得者和制定者永遠不會很好地表達你正在處理的對象,並阻止你編寫特定於屬性的代碼。 – Sherlock

相關問題