2013-05-09 67 views
0

我有一類管理其數據庫獲取應用程序返回一個大陣。相反,在班裏的結果集(PDOStatement)工作,呼應從那裏出來的HTML,我想利用返回結果集返回頁面fetchAll()從功能

return $stmt->fetchAll(PDO::FETCH_ASSOC); 

編輯:我不不想回到$stmt,因爲據我所知,這是不好的有來自單個連接現有的多個現有PDOStatement對象。爲了避免這種風險,我想在課堂上管理這些對象。如果我錯了,請糾正我。

假設數組不會超過10萬行,也許10K-50K,是否有任何性能方面的原因(或全部)爲什麼我不應該這樣做呢?我知道這是非常基本的,但處理這個問題的首選方式是什麼?

將使其對記憶產生影響的任何區別,如果我這樣做,而不是直接在類方法使用它?我會認爲這是好的,但我想從SO聽到。

+3

它會對大數組產生巨大的內存影響,爲什麼不返回$ stmt並一次取一行 – 2013-05-09 16:00:29

+0

定義你的函數,使它接受目標參數,如下所示:'function getData($ parm1,$ parm2,&$ dest_var)';然後像這樣調用它:'$ my_data = NULL;的getData(「PARM1」,「parm2」,$ my_data);'在你的抓取功能,你不回來一個大陣,但其分配給一個傳遞的參數,它_may_更多的內存效率。 – 2013-05-09 16:01:02

+0

@MarkBaker幾個頁面元素可能會使用這個數據類對象,我不想冒着在類之外擁有多個PDOStatement對象的風險。如果已經有一個光標未達到結尾,則創建一個將失敗。所以我想讓它們在類方法的範圍內管理。 – 2013-05-09 16:14:32

回答

0

如果內存的擔憂存在,則調用獲取所有不是你的朋友,不管你在做什麼?你最好還是先調用$ stmt->取在循環。由於php通過參數處理在函數內傳遞數組,而推遲到另一個應該有相同的內存和性能配置文件。

+0

你的意思是返回'$ stmt'並從調用範圍循環?看看我的編輯爲什麼我想避免這種情況。 – 2013-05-09 16:28:17

+0

更多的數據將需要更多的資源,我想最大的問題是你有哪些空間可以伸展。如果數據庫重載到有多個併發語句打開的位置會成爲問題,那麼fetchAll將是更好的選擇。如果內存是問題,那麼返回語句對象並將它放在調用範圍中會更好。 – Orangepill 2013-05-09 18:42:27