PythonQ 240-8XX Manual de usuario Pagina 573

  • Descarga
  • Añadir a mis manuales
  • Imprimir
  • Pagina
    / 768
  • Tabla de contenidos
  • MARCADORES
  • Valorado. / 5. Basado en revisión del cliente
Vista de pagina 572
552 MySQL - Technische Referenz f¨ur Version 5.0.1-alpha
Es gibt f¨ur einen Client zwei oglichkeiten, Ergebnismengen zu verarbeiten. Eine
oglichkeit besteht darin, die gesamte Ergebnismenge auf einmal abzurufen, indem
mysql_store_result() aufgerufen wird. Diese Funktion holt alle Zeilen vom Server
ab, die von der Anfrage zur¨uckgegeben werden, und speichert sie im Client. Die zweite
oglichkeit besteht darin, dass der Client die Ergebnismenge zeilenweise abruft, indem er
mysql_use_result() aufruft. Diese Funktion initialisiert den Abruf, holt aber keinerlei
Zeilen vom Server ab.
In beiden allen onnen Sie auf Zeilen zugreifen, indem Sie mysql_fetch_row() aufrufen.
Bei mysql_store_result() greift mysql_fetch_row() auf Zeilen zur¨uck, die bereits vom
Server geholt wurden. Bei mysql_use_result() ruft mysql_fetch_row() die Zeilen direkt
vom Server ab. Informationen ¨ub er die Gr¨oße der Daten in jeder Zeile sind durch Aufruf
von mysql_fetch_lengths() verf¨ugbar.
Wenn Sie mit einer Ergebnismenge fertig sind, rufen Sie mysql_free_result() auf, um
den hierf¨ur benutzten Speicher freizugeben.
Die beiden Abrufmechanismen sind komplemenar. Client-Programme sollten entscheiden,
welcher Ansatz der f¨ur ihre Erfordernisse geeignetste ist. In der Praxis wird f¨ur Clients
aufiger mysql_store_result() verwendet.
Ein Vorteil von mysql_store_result() ist, dass bereits alle Zeilen zum Client geholt
wurden. Deshalb onnen Sie nicht nur sequentiell auf Zeilen zugreifen, sondern sich in
der Ergebnismenge vorw¨arts und r¨uckw¨arts bewegen, indem Sie mysql_data_seek()
oder mysql_row_seek() benutzen, um die aktuelle Position innerhalb der Ergebnismenge
zu ¨andern. Sie onnen auch herausfinden, wie viele Zeilen es gibt, indem Sie
mysql_num_rows() aufrufen. Auf der anderen Seite kann der Speicherbedarf f¨ur
mysql_store_result() sehr hoch sein, wenn Sie große Ergebnismengen abrufen, so dass
Speichermangel eintreten kann.
Ein Vorteil von mysql_use_result() ist, dass der Client weniger Arbeitsspeicher f¨ur die
Ergebnismenge ben¨otigt, weil er nur eine Zeile zugleich erh¨alt (und weil weniger Zuweisungs-
Overhead da ist, kann mysql_use_result() schneller sein). Die Nachteile liegen darin,
dass Sie jede Zeile schnell verarbeiten m¨ussen, um zu vermeiden, den Server zu block-
ieren. Ausserdem haben Sie keinen wahlfreien (random) Zugriff auf die Zeilen innerhalb
einer Ergebnismenge (Sie onnen auf die Zeilen nur sequentiell zugreifen), und Sie wis-
sen nicht, wie viele Zeilen sich in der Ergebnismenge b efinden, bis Sie sie alle a/jointfilesconvert/293675/bgerufen
haben. Dar¨uber hinaus m¨ussen Sie alle Zeilen abrufen, selbst wenn Sie ahrend des Abrufs
feststellen, dass Sie die Information gefunden haben, nach der Sie suchen.
Die API erm¨oglicht Clients, auf die Anfragen entsprechend zu antworten (Zeilen nur wenn
otig abzurufen), ohne zu wissen, ob die Anfragen ein SELECT ist oder nicht. Das er-
reichen Sie durch Aufruf von mysql_store_result() nach jedem mysql_query() (oder
mysql_real_query()). Wenn der Ergebnismengenaufruf erfolgreich ist, war die Anfrage
ein SELECT und Sie onnen die Zeilen lesen. Wenn der Ergebnismengenaufruf fehlschl¨agt,
rufen Sie mysql_field_count() auf, um festzustellen, ob ein Ergebnis erwartet wurde oder
nicht. Wenn mysql_field_count() 0 zur¨uckgibt, gab die Anfrage keine Daten zur¨uck (was
anzeigt, dass sie kein INSERT, UPDATE, DELETE usw. war), und es wurde nicht erwartet,
dass sie Zeilen zur¨uckgibt. Wenn mysql_field_count() ungleich 0 ist, sollte die Anfrage
Zeilen zur¨uckgegeben haben, tat das aber nicht. Das zeigt an, dass die Anfrage ein SELECT
war, das fehlschlug. Sehen Sie in der Beschreibung von mysql_field_count() wegen eines
Beispiels nach, wie das gemacht wird.
Vista de pagina 572
1 2 ... 568 569 570 571 572 573 574 575 576 577 578 ... 767 768

Comentarios a estos manuales

Sin comentarios