2012-07-10 56 views
2

我正在創建一個類(Datamap),它將幫助我簡化我的模型類中的查詢。基本上,這個類(Datamap)與我的db類一起使用。我正在創建一個生成sql查詢的類。我做對了嗎?

以前爲我的模型中的插入語句我需要。現在

$db->query("INSERT INTO test(id,name) VALUES("id","name")"); 

,用數據圖類,它會像

$datamap->create("test","id=id&name=name"); 

下面是我創建的數據圖類的代碼片段。

function create($tablename,$variables){ 
    $id=0; 
    $tbl = $this->creturnval($variables); 
    $tblVal = $tbl[0]; 
    $tblData = $tbl[1]; 
    $this->db->execute("INSERT into $tablename($tblVal) VALUES($tblData);"); 
    $id = $this->db->lastInsertedId(); 
    return $id; 
} 


function creturnval($variables){ 
    $vars = explode("&",$variables); 
    $count = sizeOf($vars); 
    $tblVal = ""; 
    $tblData = ""; 
    for($i=0;$i<$count;$i++){ 
     $d = explode("=",$vars[$i]); 
     $tblVal.= $d[0].","; 
     $tblData.= "'".$d[1]."'".","; 
    } 
    $tblVal = rtrim($tblVal, ','); 
    $tblData = rtrim($tblData, ','); 
    $return[0] = $tblVal; 
    $return[1] = $tblData; 
    return $return; 
} 

我的問題實際上是性能問題。以前在我的模型類中,如果我只使用$db->query(),它似乎更快,因爲我不必經歷2個函數。

現在,爲了做一個插入,我將需要解析變量,拆分&等,然後處理它。

我使用這個Datamap類的想法實際上是爲了提供更多的可維護性和標準化。這是爲了防止所有模型類在看起來不整潔的地方使用sql語句。

您是否認爲這會帶來性能問題?

PS:我用我自己的框架,我建我的web應用程序

感謝所有的建議。

+3

不要擔心性能。只在實際遇到性能問題時擔心性能。 – Halcyon 2012-07-10 23:09:34

+0

@Frits,我不一定會同意這一點。你應該總是找到第一次寫代碼的最有效的方法。 – Austin 2012-07-10 23:12:29

+6

你寫這個包裝的方式完全否定了PDO的任何注射預防。不是一個好主意。 – Eric 2012-07-10 23:13:03

回答

2

我想書面方式SQL包裝的更常見的方式是這樣的:

$item = $datamap->create("test"); 
$item->setValue("id", $id); 
$item->setvalue("name", $name); 
$item->update(); // push to database 

$datamap->create();返回一個對象,將持有的值的記錄。 setValuegetValue允許您訪問它。 update將新值推入數據庫。同樣,您可以實施$datamap->get("test", 1234);,其中1234是您要提取記錄的ID。 get返回與create相同的對象,具有相同的功能。然後update將導致UPDATE而不是INSERT。使用update插入記錄後,您可以使用mysql_last_insert_id()獲取該id並將其設置在該對象中,以便在該點之後可以對其執行UPDATE。 (對象必須跟蹤它的'狀態')。

+0

謝謝。那大大啓發我。 – Slay 2012-07-10 23:16:42

0

搜索後,我發現它會更好地使用Zend_db。將會使用它。

相關問題