Sven Rautenberg: Mysql liefert zu große Felder für PHP

Beitrag lesen

Moin!

Hilft hier mysql_unbuffered_query()? Die Erklärung von php.net versteh ich nicht ganz, was da wo nicht gebuffert wird.

mysql_query sendet die Abfrage an die Datenbank, empfängt dann komplett das Ergebnis, speichert es in einen Zwischenspeicher und liefert erst von diesem Zwischenspeicher aus die einzelnen Ergsbniszeilen aus.

Wenn dein SELECT jetzt zuviele Daten für diesen Zwischenspeicher liefert, dann gibts genau zwei Möglichkeiten:

1. mysql_unbuffered_query speichert die Ergebnisse nicht in einem Puffer zwischen, sondern fragt jede Zeile erst dann ab, wenn sie tatsächlich von PHP abgefragt wird. Nachteile sind: 1. Die Datenbank kann während dieser Abfrage keinerlei anderweitige SQL-Requests mit DIESER Verbindung entgegennehmen, du müßtest also in so einem Fall eine zweite Verbindung zur DB aufbauen (und dabei irgendwie den Mechanismus austricksen, der beim Versuch der Neueröffnen einer Verbindung, die identisch zu einer bestehenden ist, einfach die bestehende verwendet). 2. Du kannst im Ergebnis nicht mehr herumspringen und wahlfrei Zeilen abrufen (mysql_data_seek, mysql_num_rows).

2. Du kannst die Größe der Abfrage auch dadurch verkleinern, dass du sie in mehrere Teile zerlegst, die insgesamt jeweils in den Puffer passen. "LIMIT" bietet sich hierbei an.

  • Sven Rautenberg