2013-04-23 51 views
1

我已經使這個類來處理我所有的SQL查詢。但我不確定如何正確使用它。SQL對象 - 如何正確使用它

類看起來是這樣的(這是它的一個非常簡單的版本):

class sql { 
    private $conn; 
    private $data; 

    function __construct() { 
     //makes connection to DB and sets $conn and $data 
    } 
    public function select($variables, $table, $criterias) { 
     //returns an array with all the info from DB 
    } 
    function __destruct() { 
     //closes the sql-connection 
    } 
} 

現在的問題是:這樣做超負荷DB,如果我多次使用它的每一頁上-加載? (refered爲實例#1)

$dbInfo = (new sql)->select($var,$tab,$cri); 
$moreInfo = (new sql)->select($var2,$tab2,$cri2); 
$evenMoreInfo = (new sql)->select($var3,$tab3,$cri3); 

將是有益的,使我sql類的方法靜態的?

或者每次我想進行查詢時(例如下面的例子 - 引用爲例2),我不應該創建一個sql對象的新實例嗎?

$sql = new sql(); 
$dbInfo = $sql->select($var,$tab,$cri); 
$moreInfo = $sql->select($var2,$tab2,$cri2); 
$evenMoreInfo = $sql->select($var3,$tab3,$cri3); 

如何以及何時是例#1比例#2更好的選擇,反之亦然?

如果我假設示例#1將從數據庫中獲取最多資源,那麼您何時會選擇示例#1而不是示例#2?

+0

在第二個例子中,您將連接到數據庫*一次* – 2013-04-23 10:03:31

+0

另外,就像這個問題被簡化了一樣,我仍然不明白它將如何處理JOINS,子選擇,WHERE條件如WHERE YEAR (日期)'2010'和'2013'之間或貓IN(1,2,3)',GROUP BY等...... – 2013-04-23 10:07:22

回答

-1

您的示例2更常見,但SQL對象通常是靜態/單例。因此,它根據服務器請求連接到數據庫一次。

您的基本SQL對象應處理連接到數據庫,然後處理基本輸入/輸出,如執行SQL字符串並返回結果。

然後,您可以爲每個對象/表添加新的對象,然後再與此SQL單例接口。這些課程將根據他們的桌子處理建設自己的自定義SQL,連接,字段名/類型等

如:

一個非常基本的「表」對象看起來像這樣

class SomeTableObject 
{ 
    m_TableName = 'SomeTable'; // Table to get Data from 

    function GetSelectSQL() 
    { 
     return "SELECT * FROM ".$this->m_TableName; 
    } 

    function Select($where) 
    { 
     $sql = $this->GetSelectSQL().$where; 
     return SqlSingleton::Execute($sql); 
    } 

    function GetByID($id) 
    { 
     $where = " WHERE FieldNameForID=$id"; 
     return $this->Select($where); 
    } 
} 

這些如果對象擴展具有基本GetSelectSQL,TableName,Select等函數的基類,它們會更好地工作。 GetByIDs(以及其他獲取,更新,插入)將因表而異。

+0

您確定要直接在查詢中注入$ id嗎? – 2013-04-23 10:10:18

+0

這只是他給出的一個基本例子。我會親自使用PDO並準備好聲明,但對我來說這會更有用。 – MatthewMcGovern 2013-04-23 10:11:04