2012-03-28 5 views
0

Kann jemand erklären, warum wir java: while rs.next(), php: while ($result = mysql_fetch_array) tun müssen? Wie rufen Programmiersprachen Daten aus der Datenbank ab? Was geschieht ? Warum wird die ganze Antwort nicht gefunden?Datenbankergebnis abrufen

Ich weiß es nicht, aber ich kann das wirklich nicht verstehen, ist zu fies.

brauche ich eine Dokumentation nicht nur „weil sie das tun“

PS:

$result = mysql_query($query) wird die Abfrageergebnisse für das $ Ergebnis nicht zurück? und dann: while ($row = mysql_fetch_array($result)) { do stuff } ??

Dank

+1

"Warum nicht die ganze Antwort erhalten?" Eeeeeeeeek. Leistung vielleicht? – PeeHaa

+0

Aber die Frage ist, wie geht das? Wie sagt php/java, dass die Datenbank eine Zeile gleichzeitig abruft? – pufos

+1

Sorry, ich habe es falsch gelesen. Ich dachte, ich sehe ein Warum anstelle eines Wie. Anyway: http://lxr.php.net/search?q=mysql_fetch_array&project=PHP_5_4&defs=&refs=&path=&hist= – PeeHaa

Antwort

1

Es sieht so aus, als ob dieser bestimmte Ansatz einen Leser verwendet. Der Leser Ansatz hat einige Vorteile gegenüber nur das gesamte Resultset in dem Speicher zur gleichen Zeit zu bringen:

  • Sie können manchmal Verarbeitung beginnen, bevor die Abfrage abgeschlossen ist
  • Sie in der Regel Verarbeitung beginnen können, bevor alle der Ergebnismenge zu übertragen .
  • Sie müssen das große Dataset nicht gleichzeitig im Speicher behalten (dies könnte ein großes Leistungsproblem darstellen, wenn Sie nicht alle Daten gleichzeitig benötigen).
  • Es ist ein ziemlich Standard, gut verstandener Ansatz, um Daten aus einer Datenbank zu erhalten.
1

Weil sie das tun.
Oder, wenn Sie es mögen - wie es funktioniert.

In unserem Leben können wir manchmal nicht die ganze Antwort bekommen.
Sprich, wenn Sie ein Fass aus dem Brunnen füllen wollen, haben Sie , um es durch das Leeren des Eimers mehrmals zu füllen. Es gibt einfach keinen anderen Weg. Und Pumpe macht es nicht viel anders - Sie müssen trotzdem warten, Sie können nicht die "ganze Antwort" auf einmal bekommen. Aufgrund der Stream Art der Quelle.

Die einzige Sache, die Sie tun können, ist zu verkleiden der gesamte Prozess mit einigen höheren Substitution, die den gleichen Prozess innerhalb tun wird. Sie können ein gefülltes Fass von jemandem kaufen, der es für Sie füllen möchte.

Datenbank liest die Zeilen nacheinander aus der Tabelle. Du kannst die "ganze Antwort" nicht bekommen. Aber Sie können eine Funktion schreiben (oder verwenden), die alle Füllung innen tut und Ihnen gewünschte Antwort gibt.

+0

aber die $ result = mysql_query ($ query) gewonnen; t Füllen Sie das $ result -Array mit allen zurückgegebenen Zeilen ?? – pufos

+0

können Sie eine Funktion schreiben. Das wird es für dich tun. Siehe http://stackoverflow.com/a/9888225/285587 für das Beispiel, das Ihnen das gewünschte Ergebnis bringen wird –

+0

Es geht nicht darum, Funktionen zu schreiben, das ist ... es geht darum, wie es funktioniert .. wie es nur eine Zeile zu $ ​​result holt ? was mysql_query eigentlich zurückgibt?] – pufos

0

Auf der Basisebene geben die meisten Datenbanken die Ergebnisse zeilenweise zurück. Es ist eine natürliche Methode, Daten abzurufen, und nicht alles auf einmal zu laden bedeutet, dass Sie z. B. ein Millionen Zeilenergebnis Zeile für Zeile verarbeiten können, ohne übermäßigen Speicherbedarf zu haben (vorausgesetzt, es kann Zeile für Zeile bearbeitet werden)). Wenn Sie möchten, gibt es viele Datenbank-Wrapper-Bibliotheken, die Varianten für Abfrage-Returns haben, die bereits alles in der Variable enthalten. Oder schreiben Sie eine solche Wrapper-Funktion selbst, es ist ziemlich einfach. In der Vergangenheit hatte ich eine Vielzahl von Wrapper-Funktionen, die alles in ein multidimensionales Array (mit optionaler Array-Indizierung) bringen würden, einfach eine Zeile packen, einfach ein Feld auswählen usw.

+0

man, ich verstehe, dass aber '$ result = mysql_query ($ query)' die Abfrageergebnisse nicht zu dem $ Ergebnis zurückgibt? und dann while ($ row = mysql_fetch_array ($ result)) {} ?? – pufos