int mysql_stmt_execute(MYSQL_STMT *stmt)
        
Beschreibung
          mysql_stmt_execute() führt die
          vorbereitete Anfrage aus, die zu dem Anweisungs-Handle
          gehört. Die aktuellen Werte der gebundenen Parametermarker
          werden bei diesem Aufruf an den Server geschickt, und der
          Server ersetzt die Marker durch die frisch gelieferten Daten.
        
          Wenn die Anweisung ein UPDATE,
          DELETE oder INSERT ist,
          erfahren Sie durch einen Aufruf von
          mysql_stmt_affected_rows(), wie viele
          Zeilen geändert, gelöscht oder eingefügt wurden. Ist es
          eine Anweisung wie SELECT, die eine
          Ergebnismenge generiert, müssen Sie zuerst mit
          mysql_stmt_fetch() die Daten abholen, bevor
          Sie irgendwelche Funktionen aufrufen, um die Anfrage zu
          verarbeiten. Weitere Informationen über den Abruf von
          Ergebnissen finden Sie in Abschnitt 24.2.7.11, „mysql_stmt_fetch()“.
        
          Für Anweisungen, die eine Ergebnismenge generieren, können
          Sie verlangen, dass mysql_stmt_execute()
          einen Cursor öffnet, indem Sie vor Ausführung der Anweisung
          mysql_stmt_attr_set() aufrufen. Wenn Sie
          eine Anweisung mehrmals ausführen, schließt
          mysql_stmt_execute() einen eventuell noch
          offenen Cursor, ehe es einen neuen öffnet.
        
Rückgabewerte
Null, wenn die Ausführung Erfolg hatte. Ein von null verschiedener Wert, wenn ein Fehler auftrat.
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.
Beispiel
          Das folgende Beispiel zeigt, wie eine Tabelle mithilfe von
          mysql_stmt_init(),
          mysql_stmt_prepare(),
          mysql_stmt_param_count(),
          mysql_stmt_bind_param(),
          mysql_stmt_execute() und
          mysql_stmt_affected_rows() angelegt und mit
          Daten gefüllt wird. Die mysql-Variable sei
          ein gültiger Verbindungs-Handle.
        
#define STRING_SIZE 50
#define DROP_SAMPLE_TABLE "DROP TABLE IF EXISTS test_table"
#define CREATE_SAMPLE_TABLE "CREATE TABLE test_table(col1 INT,\
                                                 col2 VARCHAR(40),\
                                                 col3 SMALLINT,\
                                                 col4 TIMESTAMP)"
#define INSERT_SAMPLE "INSERT INTO test_table(col1,col2,col3) VALUES(?,?,?)"
MYSQL_STMT    *stmt;
MYSQL_BIND    bind[3];
my_ulonglong  affected_rows;
int           param_count;
short         small_data;
int           int_data;
char          str_data[STRING_SIZE];
unsigned long str_length;
my_bool       is_null;
if (mysql_query(mysql, DROP_SAMPLE_TABLE))
{
  fprintf(stderr, " DROP TABLE failed\n");
  fprintf(stderr, " %s\n", mysql_error(mysql));
  exit(0);
}
if (mysql_query(mysql, CREATE_SAMPLE_TABLE))
{
  fprintf(stderr, " CREATE TABLE failed\n");
  fprintf(stderr, " %s\n", mysql_error(mysql));
  exit(0);
}
/* Bereite eine INSERT-Anfrage mit 3 Parametern vor */
/* (Die TIMESTAMP-Spalte ist nicht benannt; der Server */
/*  stellt sie auf das aktuelle Datum und die Uhrzeit ein.) */
stmt = mysql_stmt_init(mysql);
if (!stmt)
{
  fprintf(stderr, " mysql_stmt_init(), out of memory\n");
  exit(0);
}
if (mysql_stmt_prepare(stmt, INSERT_SAMPLE, strlen(INSERT_SAMPLE)))
{
  fprintf(stderr, " mysql_stmt_prepare(), INSERT failed\n");
  fprintf(stderr, " %s\n", mysql_stmt_error(stmt));
  exit(0);
}
fprintf(stdout, " prepare, INSERT successful\n");
/* Hole die Zahl der Parameter aus der Anweisung */
param_count= mysql_stmt_param_count(stmt);
fprintf(stdout, " total parameters in INSERT: %d\n", param_count);
if (param_count != 3) /* Validiere Parameterzahl */
{
  fprintf(stderr, " invalid parameter count returned by MySQL\n");
  exit(0);
}
/* Binde die Daten für alle 3 Parameter */
memset(bind, 0, sizeof(bind));
/* INTEGER PARAM */
/* Da dies ein Zahlentyp ist, muss buffer_length nicht angegeben werden */
bind[0].buffer_type= MYSQL_TYPE_LONG;
bind[0].buffer= (char *)&int_data;
bind[0].is_null= 0;
bind[0].length= 0;
/* STRING PARAM */
bind[1].buffer_type= MYSQL_TYPE_STRING;
bind[1].buffer= (char *)str_data;
bind[1].buffer_length= STRING_SIZE;
bind[1].is_null= 0;
bind[1].length= &str_length;
/* SMALLINT PARAM */
bind[2].buffer_type= MYSQL_TYPE_SHORT;
bind[2].buffer= (char *)&small_data;
bind[2].is_null= &is_null;
bind[2].length= 0;
/* Binde die Puffer */
if (mysql_stmt_bind_param(stmt, bind))
{
  fprintf(stderr, " mysql_stmt_bind_param() failed\n");
  fprintf(stderr, " %s\n", mysql_stmt_error(stmt));
  exit(0);
}
/* Gib Datenwerte für die erste Zeile an */
int_data= 10;             /* Integer */
strncpy(str_data, "MySQL", STRING_SIZE); /* String  */
str_length= strlen(str_data);
/* INSERT SMALLINT-Daten als NULL */
is_null= 1;
/* Führe die INSERT-Anweisung aus - 1*/
if (mysql_stmt_execute(stmt))
{
  fprintf(stderr, " mysql_stmt_execute(), 1 failed\n");
  fprintf(stderr, " %s\n", mysql_stmt_error(stmt));
  exit(0);
}
/* Hole Gesamtzahl der betroffenen Zeilen */
affected_rows= mysql_stmt_affected_rows(stmt);
fprintf(stdout, " total affected rows(insert 1): %lu\n",
                (unsigned long) affected_rows);
if (affected_rows != 1) /* validiere betroffene Zeilen */
{
  fprintf(stderr, " invalid affected rows by MySQL\n");
  exit(0);
}
/* Gib Datenwerte für zweite Zeile an und führe Anweisung erneut aus */
int_data= 1000;
strncpy(str_data, "The most popular Open Source database", STRING_SIZE);
str_length= strlen(str_data);
small_data= 1000;         /* smallint */
is_null= 0;               /* Zurücksetzen */
/* Führe die INSERT-Anweisung aus - 2*/
if (mysql_stmt_execute(stmt))
{
  fprintf(stderr, " mysql_stmt_execute, 2 failed\n");
  fprintf(stderr, " %s\n", mysql_stmt_error(stmt));
  exit(0);
}
  /* Hole Gesamtzahl der betroffenen Zeilen */
affected_rows= mysql_stmt_affected_rows(stmt);
fprintf(stdout, " total affected rows(insert 2): %lu\n",
                (unsigned long) affected_rows);
  if (affected_rows != 1) /* validiere betroffene Zeilen */
{
  fprintf(stderr, " invalid affected rows by MySQL\n");
  exit(0);
}
/* Schließe die Anweisung */
if (mysql_stmt_close(stmt))
{
  fprintf(stderr, " failed while closing the statement\n");
  fprintf(stderr, " %s\n", mysql_stmt_error(stmt));
  exit(0);
}
          Hinweis: Vollständigere
          Beispiele für die Nutzung von Funktionen für vorbereitete
          Anweisungen finden Sie in der Datei
          tests/mysql_client_test.c. Diese liegt in
          der MySQL-Quelldistribution und im BitKeeper-Quellarchiv.
        
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.

