MYSQL_RES *mysql_use_result(MYSQL *mysql)
Beschreibung
Sie müssen mysql_store_result()
oder
mysql_use_result()
für jede Anfrage
aufrufen, die erfolgreich Daten abruft
(SELECT
, SHOW
,
DESCRIBE
, EXPLAIN
).
mysql_use_result()
initiiert den Abruf
einer Ergebnismenge, lädt sie jedoch im Gegensatz zu
mysql_store_result()
nicht komplett auf den
Client herunter. Stattdessen wird jede Zeile einzeln mit einem
Aufruf von mysql_fetch_row()
abgefragt. So
wird ein Anfrageergebnis direkt vom Server gelesen, ohne es in
einer temporären Tabelle oder in einem lokalen Puffer
zwischenzuspeichern. Das geht schneller und belegt weniger
Speicher als mysql_store_result()
. Der
Client weist nur für die aktuelle Zeile Speicher zu und
reserviert einen Kommunikationspuffer, der bis zur Größe von
max_allowed_packet
Bytes anwachsen kann.
Demgegenüber sollten Sie
mysql_use_result()
nicht verwenden, wenn
Sie jede Zeile auf der Clientseite aufwändig vearbeiten oder
die Ausgabe an einen Bildschirm senden, in den der Benutzer
^S
(Stop Scroll) eintippen kann. Dies
würde den Server sperren und verhindern, dass andere Threads
Tabellen aktualisieren können, aus denen die Daten abgerufen
werden.
Wenn Sie mit mysql_use_result()
arbeiten,
müssen Sie mysql_fetch_row()
so oft
ausführen, bis ein NULL
-Wert
zurückgeliefert wird. Sonst werden die nicht abgerufenen
Zeilen zu einem Teil der Ergebnismenge der nächsten Anfrage.
Wenn Sie dies vergessen, meldet die C-API den Fehler
Commands out of sync; you can't run this command
now
!
Die Funktionen mysql_data_seek()
,
mysql_row_seek()
,
mysql_row_tell()
,
mysql_num_rows()
oder
mysql_affected_rows()
können nicht mit
einer Ergebnisrückgabe von
mysql_use_result()
benutzt werden. Ebenso
wenig können Sie andere Anfragen absetzen, bevor die Funktion
mysql_use_result()
ihre Arbeit beendet hat.
(Immerhin liefert mysql_num_rows()
ein
akkurates Ergebnis, wenn Sie alle Zeilen abgeholt haben.)
Sie müssen mysql_free_result()
aufrufen,
wenn Sie mit der Ergebnismenge fertig sind.
Bei Verwendung des Embedded Servers
libmysqld
geht der Vorteil des geringen
Speicherbedarfs verloren, da die Speicherbelegung inkrementell
mit jeder abgeholten Zeile anwächst, bis Sie
mysql_free_result()
aufrufen.
Rückgabewerte
Eine MYSQL_RES
-Ergebnisstruktur.
NULL
, wenn ein Fehler auftrat.
Fehler
mysql_use_result()
setzt bei Erfolg
mysql_error()
und
mysql_errno()
zurück.
CR_COMMANDS_OUT_OF_SYNC
Befehle wurden in der falschen Reihenfolge ausgeführt.
CR_OUT_OF_MEMORY
Speicherüberlauf.
CR_SERVER_GONE_ERROR
Der MySQL Server ist nicht mehr verfügbar.
CR_SERVER_LOST
Die Serververbindung brach während der Anfrage ab.
CR_UNKNOWN_ERROR
Ein unbekannter Fehler ist aufgetreten.
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.