2012-03-28 101 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