2012-07-11 64 views
1

我想問爲什麼人們使用zend_db風格?爲什麼要將sql查詢轉換爲Zend_Db風格?

例如

 $select = $d2b->select() 
      ->from('users', array('userid','username')) 
      ->where('userid=?', 2); 

$result = $d2b->fetchRow($select); 
echo $result->username; 

代替

$result = $d2b->fetchAll('SELECT * FROM users WHERE userid = ?', 2); 
echo $result[0]->username; 

哪一個更好?或者它是一樣的,只是爲了可維護性。

+0

兩者都不是「更好」 – 2012-07-11 20:04:15

+0

兩者都有優點和缺點。 – 2012-07-12 20:51:59

回答

6

一個原因是使用Zend_Db的風格抽象了SQL的產生;這意味着我們在數據庫引擎之間切換可以像換出一個類一樣簡單,而不必重寫不兼容的查詢。此外,Zend_db抽象出SQL查詢轉義,大大降低了SQL注入攻擊的風險。它還爲不懂SQL的人提供數據庫查詢功能。

+0

謝謝!對不起,我的英語不太好。當你說抽象出來時,你的意思是當我們採用zend_db風格時,我們不需要專門針對sql注入(比如addslashes等)?它是在zend db類中自動完成的? – Slay 2012-07-11 20:23:43

+0

抽象基本上是「別的事情爲你工作」,通常是一個簡單的,可重複的任務。例如,'+'運算符是加法函數的抽象。函數本身實際上操縱了一堆內存中的位,但這是你不必做的事情,因爲它已經被抽象出來了。 – 2012-07-11 21:13:54

+0

非常感謝您的解釋! – Slay 2012-07-11 23:01:24

5

最終結果是一樣的,所以這取決於您對可讀性和可維護性的個人偏好。

的流暢的界面風格的一個優點是,它可以更容易地建立起來的查詢編程,例如:

$select = $d2b->select() 
     ->from('users', array('userid','username')); 

if ([some condition]) { 
    $select->where('userid = ?', 2); 
} else { 
    $select->where('userid = ?', 62); 
} 
+0

+1加上Richard Ye提到的(RDBMS之間的可移植性)。 – Tadeck 2012-07-11 20:09:12

+0

謝謝,大大有助於 – Slay 2012-07-11 20:22:42