Tom: auf externe Datenbank zugreifen

Beitrag lesen

Hello,

Wenn du nur die Anzahl der Datensätze zählen willst, ist es unsinnig, sie komplett abzufragen. Damit mysql_num_rows() ein Ergebnis liefern kann, muss PHP alle Datensätze vom MySQL-Server abholen.

Bist Du da sicher?

Das habe ich neulich erst versucht, herauszufinden, wo das Resultset des buffered Query gespeichert wird. MMn wird es im Verantwortungsbereich des MySQL-Server gespeichert, was aber trotzdem nicht davon befreit, dass die Daten aus der normalen Datenhaltung kopiert werden in einen eigenen Bereich übertragen werden. Ich hatte das untersucht, weil ich wissen wollte, ob beim einem unbuffered Query auch ein mysql_free_result notwendig ist. Das ist so. Unter der Resultkennung wird entweder direkt die Ausgabeschnittstelle freigegeben (unbubbered Query) oder der Ausgabespeciherbereich, je nachdem, ob mysql_strore_result zwischendurch aufgerifen wurde. bei den obigen Funktionen handelt es ich um die mit den PHP-Funktionen gelichnamigen der C-API.

http://dev.mysql.com/doc/refman/5.0/en/null-mysql-store-result.html
und von dort werden die Daten dann "abgeholt"
http://dev.mysql.com/doc/refman/5.0/en/mysql-fetch-row.html

Erst mit einer (PHP-) mysql_fetch_*-Funktion werden die Daten dann in den Speicherbereich, der zum Script gehört, abgeholt. Das kann durchaus wichtig sein bei großen Resultsets. Wenn man nämlich nur 8MB Scriptspeicher hat und muss so ein großes Resultset (oder mehrere) verarbeiten, kann man es auch "stückchenweise" abholen und den Puffer in PHP immer wiederverwenden. natürlich nur, wenn es programmtechnisch sinnvoll ist...

Harzliche Grüße aus
Sankt Andreasberg
und Frohes Neues Jahr

Tom

--
Nur selber lernen macht schlau