Kapitel 9: MySQL-APIs 591
R¨uckgabewerte
Die Thread-Kennung der aktuellen Verbindung.
Fehler
Keine.
9.4.3.52 mysql_use_result()
MYSQL_RES *mysql_use_result(MYSQL *mysql)
Beschreibung
Sie m¨ussen mysql_store_result() oder mysql_use_result() f¨ur jede Anfrage aufrufen,
die erfolgreich Daten abruft (SELECT, SHOW, DESCRIBE, EXPLAIN).
mysql_use_result() initiiert einen Ergebnismengen-Abruf, aber liest die Ergebnismenge
nicht tats¨achlich in den Client wie mysql_store_result(). Statt dessen muss jede Zeile
individuell a/jointfilesconvert/293675/bgerufen werden, indem Aufrufe von mysql_fetch_row() durchgef¨uhrt werden.
Das liest das Ergebnis einer Anfrage direkt vom Server, ohne es in einer tempor¨aren Tabelle
oder einem lokalen Puffer zu speichern, was manchmal schneller ist und viel weniger Speicher
benutzt als mysql_store_result(). Dem Client wird nur Speicher f¨ur die aktuelle Zeile
zugewiesen sowie ein Kommunikationspuffer, der bis zu max_allowed_packet Bytes Groß
werden kann.
Auf der anderen Seite sollten Sie mysql_use_result() nicht benutzen, wenn Sie viele Ve-
rarbeitungen f¨ur jede Zeile auf der Client-Seite durchf¨uhren oder wenn die Ausgabe auf
den Bildschirm geschickt wird, auf dem der Benutzer ^S (stop scroll) eingeben kann. Das
bindet den Server und verhindert, dass andere Threads irgend welche Tabellen aktualisieren
k¨onnen, von denen gerade Daten geholt werden.
Wenn Sie mysql_use_result() benutzen, m¨ussen Sie mysql_fetch_row() ausf¨uhren, bis
ein NULL-Wert zur¨uckgegeben wird, denn ansonsten werden die nicht geholten Zeilen als Teil
der Ergebnismenge bei Ihrer n¨achsten Anfrage zur¨uckgegeben. Die C-API gibt den Fehler
Commands out of sync; You can’t run this command now aus, wenn Sie das vergessen!
Sie k¨onnen mysql_data_seek(), mysql_row_seek(), mysql_row_tell(), mysql_num_
rows() oder mysql_affected_rows() nicht bei einem Ergebnis verwenden, das von
mysql_use_result() zur¨uckgegeb en wird. Ausserdem d¨urfen Sie keine anderen Anfragen
absetzen, bis mysql_use_result() beendet ist. (Nachdem Sie alle Zeilen a/jointfilesconvert/293675/bgeholt haben,
wird mysql_num_rows() jedoch exakt die Anzahl der geholten Zeilen zur¨uckgeben.)
Sie m¨ussen mysql_free_result() aufrufen, wenn Sie mit der Ergebnismenge fertig sind.
R¨uckgabewerte
Eine MYSQL_RES-Ergebnisstruktur. NULL, wenn ein Fehler auftrat.
Comentarios a estos manuales