int mysql_stmt_fetch(MYSQL_STMT *stmt)
        
Beschreibung
          Die Funktion mysql_stmt_fetch() liefert die
          nächste Zeile der Ergebnismenge und kann nur aufgerufen
          werden, während die Ergebnismenge besteht, also nach einem
          mysql_stmt_execute()-Aufruf, der eine
          Ergebnismenge produziert, oder nach einem
          mysql_stmt_store_result()-Aufruf, der im
          Anschluss an mysql_stmt_execute() die
          gesamte Ergebnismenge puffert.
        
          Die Funktion mysql_stmt_fetch() liefert
          Zeilendaten über alle Spalten der aktuellen Zeilenmenge an
          die in mysql_stmt_bind_result() gebundenen
          Puffer. Die Längen werden an den
          length-Zeiger zurückgegeben.
        
          Alle Spalten müssen von der Anwendung gebunden werden, ehe
          mysql_stmt_fetch() aufgerufen werden kann.
        
          Ist ein abgerufener Datenwert NULL, ist der
          *is_null-Wert der zugehörigen
          MYSQL_BIND-Struktur TRUE (1). Andernfalls
          werden die Daten und ihre Länge in die Elemente
          *buffer und *length
          zurückgegeben, und zwar basierend auf dem von der Anwendung
          angegebenen Puffertyp. Jeder numerische und temporale Typ hat
          eine festgelegte Länge, wie in der folgenden Tabelle
          angegeben. Die Länge von String-Typen hängt von der Länge
          des tatsächlichen Datenwerts ab, wie in
          data_length angegeben.
        
| Typ | Länge | 
| MYSQL_TYPE_TINY | 1 | 
| MYSQL_TYPE_SHORT | 2 | 
| MYSQL_TYPE_LONG | 4 | 
| MYSQL_TYPE_LONGLONG | 8 | 
| MYSQL_TYPE_FLOAT | 4 | 
| MYSQL_TYPE_DOUBLE | 8 | 
| MYSQL_TYPE_TIME | sizeof(MYSQL_TIME) | 
| MYSQL_TYPE_DATE | sizeof(MYSQL_TIME) | 
| MYSQL_TYPE_DATETIME | sizeof(MYSQL_TIME) | 
| MYSQL_TYPE_STRING | data_length | 
| MYSQL_TYPE_BLOB | data_length | 
Rückgabewerte
| Rückgabewert | Beschreibung | 
| 0 | Erfolg, die Daten wurden in die Anwendungsdatenpuffer geladen. | 
| 1 | Fehler. Den Fehlercode und die Fehlermeldung erhalten Sie von mysql_stmt_errno()undmysql_stmt_error(). | 
| MYSQL_NO_DATA | Keine weiteren Zeilen/Daten vorhanden. | 
| MYSQL_DATA_TRUNCATED | Daten wurden abgeschnitten. | 
          MYSQL_DATA_TRUNCATED-Meldungen werden nur
          zurückgegeben, wenn dies mit
          mysql_options() eingestellt wurde. Um bei
          einer Rückgabe dieses Werts festzustellen, welche Daten
          abgeschnitten wurden, schauen Sie sich die
          error-Bestandteile der
          MYSQL_BIND-Parameterstrukturen an.
        
Fehler
              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.
              CR_UNSUPPORTED_PARAM_TYPE
            
              Der Puffertyp ist MYSQL_TYPE_DATE,
              MYSQL_TYPE_TIME,
              MYSQL_TYPE_DATETIME oder
              MYSQL_TYPE_TIMESTAMP, aber der Datentyp
              ist nicht DATE,
              TIME, DATETIME oder
              TIMESTAMP.
            
              Alle anderen Fehler wegen nicht unterstützter
              Konvertierungen werden von
              mysql_stmt_bind_result()
              zurückgegeben.
            
Beispiel
          Das folgende Beispiel zeigt, wie man Daten aus einer Tabelle
          mit mysql_stmt_result_metadata(),
          mysql_stmt_bind_result() und
          mysql_stmt_fetch() abholt. (Es wird
          erwartet, dass mit diesem Beispiel die beiden Zeilen abgerufen
          werden, die in Abschnitt 24.2.7.10, „mysql_stmt_execute()“,
          eingefügt wurden.) Die Variable mysql sei
          ein gültiger Verbindungs-Handle.
        
#define STRING_SIZE 50
#define SELECT_SAMPLE "SELECT col1, col2, col3, col4 FROM test_table"
MYSQL_STMT    *stmt;
MYSQL_BIND    bind[4];
MYSQL_RES     *prepare_meta_result;
MYSQL_TIME    ts;
unsigned long length[4];
int           param_count, column_count, row_count;
short         small_data;
int           int_data;
char          str_data[STRING_SIZE];
my_bool       is_null[4];
/* SELECT-Anfrage vorbereiten, um Daten aus test_table zu holen*/
stmt = mysql_stmt_init(mysql);
if (!stmt)
{
  fprintf(stderr, " mysql_stmt_init(), out of memory\n");
  exit(0);
}
if (mysql_stmt_prepare(stmt, SELECT_SAMPLE, strlen(SELECT_SAMPLE)))
{
  fprintf(stderr, " mysql_stmt_prepare(), SELECT failed\n");
  fprintf(stderr, " %s\n", mysql_stmt_error(stmt));
  exit(0);
}
fprintf(stdout, " prepare, SELECT successful\n");
/* Hole Zahl der Parameter aus der Anweisung */
param_count= mysql_stmt_param_count(stmt);
fprintf(stdout, " total parameters in SELECT: %d\n", param_count);
if (param_count != 0) /* validiere Zahl der Parameter */
{
  fprintf(stderr, " invalid parameter count returned by MySQL\n");
  exit(0);
}
/* Hole Metainformationen zur Ergebnismenge */
prepare_meta_result = mysql_stmt_result_metadata(stmt);
if (!prepare_meta_result)
{
  fprintf(stderr,
         " mysql_stmt_result_metadata(), returned no meta information\n");
  fprintf(stderr, " %s\n", mysql_stmt_error(stmt));
  exit(0);
}
/* Hole Gesamtzahl der Spalten in der Anfrage */
column_count= mysql_num_fields(prepare_meta_result);
fprintf(stdout, " total columns in SELECT statement: %d\n", column_count);
if (column_count != 4) /* Validiere Spaltenzahl*/
{
  fprintf(stderr, " invalid column count returned by MySQL\n");
  exit(0);
}
/* Führe die SELECT-Anfrage aus */
if (mysql_stmt_execute(stmt))
{
  fprintf(stderr, " mysql_stmt_execute(), failed\n");
  fprintf(stderr, " %s\n", mysql_stmt_error(stmt));
  exit(0);
}
/* Binde die Ergebnispuffer für alle 4 Spalten, bevor sie abgeholt werden */
memset(bind, 0, sizeof(bind));
/* INTEGER COLUMN */
bind[0].buffer_type= MYSQL_TYPE_LONG;
bind[0].buffer= (char *)&int_data;
bind[0].is_null= &is_null[0];
bind[0].length= &length[0];
/* STRING COLUMN */
bind[1].buffer_type= MYSQL_TYPE_STRING;
bind[1].buffer= (char *)str_data;
bind[1].buffer_length= STRING_SIZE;
bind[1].is_null= &is_null[1];
bind[1].length= &length[1];
/* SMALLINT COLUMN */
bind[2].buffer_type= MYSQL_TYPE_SHORT;
bind[2].buffer= (char *)&small_data;
bind[2].is_null= &is_null[2];
bind[2].length= &length[2];
/* TIMESTAMP COLUMN */
bind[3].buffer_type= MYSQL_TYPE_TIMESTAMP;
bind[3].buffer= (char *)&ts;
bind[3].is_null= &is_null[3];
bind[3].length= &length[3];
/* Binde die Ergebnispuffer */
if (mysql_stmt_bind_result(stmt, bind))
{
  fprintf(stderr, " mysql_stmt_bind_result() failed\n");
  fprintf(stderr, " %s\n", mysql_stmt_error(stmt));
  exit(0);
}
/* Alle Ergebnisse auf dem Client zwischenspeichern */
if (mysql_stmt_store_result(stmt))
{
  fprintf(stderr, " mysql_stmt_store_result() failed\n");
  fprintf(stderr, " %s\n", mysql_stmt_error(stmt));
  exit(0);
}
/* Alle Zeilen abholen */
row_count= 0;
fprintf(stdout, "Fetching results ...\n");
while (!mysql_stmt_fetch(stmt))
{
  row_count++;
  fprintf(stdout, "  row %d\n", row_count);
  /* Spalte 1 */
  fprintf(stdout, "   column1 (integer)  : ");
  if (is_null[0])
    fprintf(stdout, " NULL\n");
  else
    fprintf(stdout, " %d(%ld)\n", int_data, length[0]);
  /* Spalte 2 */
  fprintf(stdout, "   column2 (string)   : ");
  if (is_null[1])
    fprintf(stdout, " NULL\n");
  else
    fprintf(stdout, " %s(%ld)\n", str_data, length[1]);
  /* Spalte 3 */
  fprintf(stdout, "   column3 (smallint) : ");
  if (is_null[2])
    fprintf(stdout, " NULL\n");
  else
    fprintf(stdout, " %d(%ld)\n", small_data, length[2]);
  /* Spalte 4 */
  fprintf(stdout, "   column4 (timestamp): ");
  if (is_null[3])
    fprintf(stdout, " NULL\n");
  else
    fprintf(stdout, " %04d-%02d-%02d %02d:%02d:%02d (%ld)\n",
                     ts.year, ts.month, ts.day,
                     ts.hour, ts.minute, ts.second,
                     length[3]);
  fprintf(stdout, "\n");
}
/* Abgeholte Zeilen validieren */
fprintf(stdout, " total rows fetched: %d\n", row_count);
if (row_count != 2)
{
  fprintf(stderr, " MySQL failed to return all rows\n");
  exit(0);
}
/* Vorbereitete Ergebnismetadaten freigeben */
mysql_free_result(prepare_meta_result);
/* Anweisung schließen */
if (mysql_stmt_close(stmt))
{
  fprintf(stderr, " failed while closing the statement\n");
  fprintf(stderr, " %s\n", mysql_stmt_error(stmt));
  exit(0);
}
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.

