int mysql_execute(MYSQL_STMT *stmt).
        
Descrição
          mysql_execute() executa a consulta
          preparada associada ao controlador de instruções. O valor
          atual do marcador de parâmetros é enviado para o servidor
          durante esta chamada, e o servidor substituir marcadores com
          os novos dados fornecidos.
        
          Se a instrução é um UPDATE,
          DELETE ou INSERT, o
          número total de registros altrados, deletados ou inseridos
          pode ser encontrado chamando
          mysql_stmt_affected_rows(). Se este é um
          resultado de uma consulta como SELECT, deve
          se chamar mysql_fetch() para buscar dados
          previamente para fazer qualquer outra função que resulte em
          um processamento de consulta. Para mais informações sobre
          como buscar os resultados, consulte
          Secção 12.1.7.13, “mysql_fetch()”
        
Valor Retornado
          Zero se a execução obteve sicesso. Diferente de zero se
          ocorreu um erro. O código de erro e a mensagem podem ser
          obtidas chamando mysql_stmt_errno() e
          mysql_stmt_error().
        
Erros
              CR_NO_PREPARE_QUERY
            
Nenhuma consulta preprada previamente para execução
              CR_ALL_PARAMS_NOT_BOUND
            
Não forma fornecidos todos os dados de parâmetros.
              CR_COMMANDS_OUT_OF_SYNC
            
Os comando foram executados em uma ordem inpropriada.
              CR_OUT_OF_MEMORY
            
Falta de memória
              CR_SERVER_GONE_ERROR
            
O servidor MySQL foi finalizado.
              CR_SERVER_LOST
            
A conexão ao servidor MySQL foi perdida durante a consulta.
              CR_UNKNOWN_ERROR
            
Um erro desconhecido ocorreu.
Exemplo
          O seguinte exemplo demonstra como criar e preencher uma tabela
          usando mysql_prepare(),
          mysql_param_count(),
          mysql_bind_param(),
          mysql_execute() e
          mysql_stmt_affected_rows(). A variável
          mysql é considerada como um controlador de
          conexão válido.
        
#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);
}
/* Prepare an INSERT query with 3 parameters */
/* (the TIMESTAMP column is not named; it will */
/* be set to the current date and time) */
stmt = mysql_prepare(mysql, INSERT_SAMPLE, strlen(INSERT_SAMPLE));
if (!stmt)
{
  fprintf(stderr, " mysql_prepare(), INSERT failed\n");
  fprintf(stderr, " %s\n", mysql_error(mysql));
  exit(0);
}
fprintf(stdout, " prepare, INSERT successful\n");
/* Get the parameter count from the statement */
param_count= mysql_param_count(stmt);
fprintf(stdout, " total parameters in INSERT: %d\n", param_count);
if (param_count != 3) /* validate parameter count */
{
  fprintf(stderr, " invalid parameter count returned by MySQL\n");
  exit(0);
}
/* Bind the data for all 3 parameters */
/* INTEGER PARAM */
/* This is a number type, so there is no need to specify buffer_length */
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;
/* Bind the buffers */
if (mysql_bind_param(stmt, bind))
{
  fprintf(stderr, " mysql_bind_param() failed\n");
  fprintf(stderr, " %s\n", mysql_stmt_error(stmt));
  exit(0);
}
/* Specify the data values for the first row */
int_data= 10;             /* integer */
strncpy(str_data, "MySQL", STRING_SIZE); /* string  */
str_length= strlen(str_data);
/* INSERT SMALLINT data as NULL */
is_null= 1;
/* Execute the INSERT statement - 1*/
if (mysql_execute(stmt))
{
  fprintf(stderr, " mysql_execute(), 1 failed\n");
  fprintf(stderr, " %s\n", mysql_stmt_error(stmt));
  exit(0);
}
/* Get the total number of affected rows */
affected_rows= mysql_stmt_affected_rows(stmt);
fprintf(stdout, " total affected rows(insert 1): %ld\n", affected_rows);
if (affected_rows != 1) /* validate affected rows */
{
  fprintf(stderr, " invalid affected rows by MySQL\n");
  exit(0);
}
/* Specify data values for second row, then re-execute the statement */
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;               /* reset */
/* Execute the INSERT statement - 2*/
if (mysql_execute(stmt))
{
  fprintf(stderr, " mysql_execute, 2 failed\n");
  fprintf(stderr, " %s\n", mysql_stmt_error(stmt));
  exit(0);
}
/* Get the total rows affected */
affected_rows= mysql_stmt_affected_rows(stmt);
fprintf(stdout, " total affected rows(insert 2): %ld\n", affected_rows);
if (affected_rows != 1) /* validate affected rows */
{
  fprintf(stderr, " invalid affected rows by MySQL\n");
  exit(0);
}
/* Close the statement */
if (mysql_stmt_close(stmt))
{
  fprintf(stderr, " failed while closing the statement\n");
  fprintf(stderr, " %s\n", mysql_stmt_error(stmt));
  exit(0);
}
          Nota: Para exemplos completos
          do uso das funções de instruções preparadas, veja
          tests/mysql_client_test.c. Este arquivo
          pode ser obtido em uma distribuição fonte ou do repositório
          do Bitkeeper.
        
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.

