2012-03-28 96 views
0

有人可以解釋爲什麼我們需要做java: while rs.next()php: while ($result = mysql_fetch_array)?編程語言如何從數據庫中檢索數據。怎麼了 ?爲什麼不尊重整個迴應?檢索數據庫結果

我不知道,但我真的不明白這一點,是方式來討厭。

我需要一個文檔,不只是「因爲他們做的是」

PS:

$result = mysql_query($query)不會返回查詢結果到$結果?然後:while ($row = mysql_fetch_array($result)) { do stuff } ??

謝謝

+1

「爲什麼不反映整個迴應?」 Eeeeeeeeek。性能可能? – PeeHaa 2012-03-28 14:23:35

+0

但問題是它是如何做到的? php/java如何告訴數據庫一次檢索一行? – pufos 2012-03-28 14:24:39

+1

對不起,我誤讀了。我以爲我看到了一個爲什麼而不是如何。無論如何:http://lxr.php.net/search?q=mysql_fetch_array&project=PHP_5_4&defs=&refs=&path=&hist= – PeeHaa 2012-03-28 14:26:34

回答

1

它看起來像特定的方法使用讀者。讀者的做法在剛剛把整個結果集到內存中,同時具有一定的優勢:

  • 有時你可以開始處理之前完成查詢
  • 可以傳輸整個結果集之前,通常開始處理。
  • 您不必同時將大型數據集保存在內存中(如果您不需要同時擁有所有數據,可能會出現性能問題)。
  • 這是一個非常標準的,從數據庫中獲取數據的方法。
1

因爲他們這樣做。
或者,如果你喜歡它 - 它是如何工作的。

在我們的生活中,有時我們無法得到整個迴應。
說,如果你想從井中填滿一桶,你通過清空桶幾次來填補它。沒有別的辦法。 和泵不會有很大的不同 - 你必須等待,你不能立即得到「整個迴應」。由於來源的性質。

你可以做的唯一的事情是用一些更高級別的替換來僞裝整個過程,它會做同樣的過程。你可以向那些願意爲你填充它的人購買裝滿的桶。

數據庫逐一讀取表中的行。你無法得到「整個迴應」。 但是你可以編寫(或使用)一個函數,它將完成所有的填充並給你想要的響應。

+0

但是$ result = mysql_query( $ query)won; t用返回的所有行填充$ result數組? – pufos 2012-03-28 14:33:55

+0

你可以寫一個函數。這將爲你做。請參閱http://stackoverflow.com/a/9888225/285587爲例,它將帶給你想要的結果 – 2012-03-28 14:49:00

+0

它不是寫函數做到這一點..是關於它是如何工作的..它如何只獲取一行到$ result ?什麼mysql_query實際返回?] – pufos 2012-03-28 14:51:16

0

在基本級別上,大多數數據庫總是按行逐行返回結果。這是一種自然的方式來檢索數據,而不是一次加載所有內容,例如,您可以一次處理一行一百萬行結果,而不使用過多的內存(假設它可以一次處理一行)。如果你願意,那裏有很多數據庫包裝庫,它們在變量中已經包含了所有的查詢返回值。或者自己寫一個這樣的包裝函數,這很簡單。在過去,我有各種各樣的包裝函數,將所有東西放到一個多維數組中(使用可選的數組索引),只需抓住一行,只需抓住一個字段等。

+0

男人,我明白,但是'$ result = mysql_query($ query)'不會將查詢結果返回給$ result?然後while($ row = mysql_fetch_array($ result)){}? – pufos 2012-03-28 14:43:56