2013-07-01 120 views
4

我一直在使用我自己的cms/framework構建了很多網站,並且我開發了一種執行查詢的簡單方法。最近我開始玩其他框架,如代碼點火器。他們提供的原始查詢imputs如...原始查詢

$this->db->query(「SELECT * FROM news WHERE newsId=1;」); 

但他們也提供通過PHP方法鏈接MySQL命令的。

$this->db->select("*")->from("news")->where("newsId=?"); 

問題是;每個選項的主要區別和好處是什麼。

我知道後面的選項可以防止MySQL注入,但說實話,您可以使用$this->db->escape()完全相同。

所以最後從我可以看到的後一個選項只會讓你在鍵盤上使用更多的字母,這可能會讓你放慢速度。

回答

1

最近的php框架開發人員使用AR(活動記錄)/ DAO(數據庫訪問對象)模式。因爲它真的比原始查詢更快。現在的AR技術最初是從PDO(php數據對象)構建的。

爲什麼活動記錄真的很費力?

其真正的查詢寫作是開發人員的最佳習慣。但有些問題說得太

當我們寫插入和更新大型查詢,有時很難每一行的值相匹配..但AR使它容易。您只需首先添加數組,然後輕鬆執行。
2.無論你使用什麼數據庫。
3.有時,如果讀取或寫入查詢有很多條件,那麼它很難。但是在AR中,您可以級聯多個對象以進行1個查詢。
4。 AR節省您的時間重複語句

+1

DAO不一定更快。相反,有很多代碼將DAL接口轉換爲實際的SQL查詢,這肯定比自己寫查詢要慢。通常手工查詢可能比DAL根據模板和常見情況拼湊在一起的東西更有效。 – deceze

1

我不能講笨(我所看到的似乎相當吊掛在一起,坦率地說),但也有幾個原因可以使用這樣的系統:

  • 作爲一個組成部分支持不同的DBMS後端,其中例如->offset(10)->limit(10)會自動生成的OFFSETLIMIT正確的變體抽象層,和類似的子句爲MySQL VS的PostgreSQL等
  • 爲「ORM」系統的一部分,的其中結果根據要查詢的表和列,查詢自動映射到適當類的模型對象
  • 爲了向後兼容或安裝要求(例如,在特定安裝中,表「news」實際上可能被稱爲「app1_news」,以避免與另一個應用程序相沖突)
  • 來處理參數化查詢,如您的示例中所示;儘管在很大程度上與這種抽象無關,但它們提供的不僅僅是轉義,因爲DBMS(MySQL或任何正在使用的)知道查詢的哪些部分是固定的,哪些是可變的,這對於性能和安全性可能是有用的
2

我認爲codeigniter中的activerecord的實現適用於小而簡單的查詢。 當您需要大量連接的複雜查詢時,只需編寫查詢本身就更加清楚。

如果你有一定的SQL技能,我不認爲額外的抽象層會給你提供更好的性能。