my_bool mysql_stmt_send_long_data(MYSQL_STMT *stmt,
        unsigned int parameter_number, const char *data, unsigned long
        length)
      
Description
        Allows an application to send parameter data to the server in
        pieces (or “chunks”). Call this function after
        mysql_stmt_bind_param() and
        before mysql_stmt_execute(). It
        can be called multiple times to send the parts of a character or
        binary data value for a column, which must be one of the
        TEXT or
        BLOB data types.
      
        parameter_number indicates which parameter to
        associate the data with. Parameters are numbered beginning with
        0. data is a pointer to a buffer containing
        data to be sent, and length indicates the
        number of bytes in the buffer.
      
          The next mysql_stmt_execute()
          call ignores the bind buffer for all parameters that have been
          used with
          mysql_stmt_send_long_data()
          since last
          mysql_stmt_execute() or
          mysql_stmt_reset().
        
        If you want to reset/forget the sent data, you can do it with
        mysql_stmt_reset(). See
        Section 17.6.7.21, “mysql_stmt_reset()”.
      
This function was added in MySQL 4.1.2.
Return Values
Zero if the data is sent successfully to server. Nonzero if an error occurred.
Errors
Commands were executed in an improper order.
The MySQL server has gone away.
Out of memory.
An unknown error occurred.
Example
        The following example demonstrates how to send the data for a
        TEXT column in chunks. It inserts
        the data value 'MySQL - The most popular Open Source
        database' into the text_column
        column. The mysql variable is assumed to be a
        valid connection handle.
      
#define INSERT_QUERY "INSERT INTO \
                      test_long_data(text_column) VALUES(?)"
MYSQL_BIND bind[1];
long       length;
stmt = mysql_stmt_init(mysql);
if (!stmt)
{
  fprintf(stderr, " mysql_stmt_init(), out of memory\n");
  exit(0);
}
if (mysql_stmt_prepare(stmt, INSERT_QUERY, strlen(INSERT_QUERY)))
{
  fprintf(stderr, "\n mysql_stmt_prepare(), INSERT failed");
  fprintf(stderr, "\n %s", mysql_stmt_error(stmt));
  exit(0);
}
 memset(bind, 0, sizeof(bind));
 bind[0].buffer_type= MYSQL_TYPE_STRING;
 bind[0].length= &length;
 bind[0].is_null= 0;
/* Bind the buffers */
if (mysql_stmt_bind_param(stmt, bind))
{
  fprintf(stderr, "\n param bind failed");
  fprintf(stderr, "\n %s", mysql_stmt_error(stmt));
  exit(0);
}
 /* Supply data in chunks to server */
 if (mysql_stmt_send_long_data(stmt,0,"MySQL",5))
{
  fprintf(stderr, "\n send_long_data failed");
  fprintf(stderr, "\n %s", mysql_stmt_error(stmt));
  exit(0);
}
 /* Supply the next piece of data */
 if (mysql_stmt_send_long_data(stmt,0,
           " - The most popular Open Source database",40))
{
  fprintf(stderr, "\n send_long_data failed");
  fprintf(stderr, "\n %s", mysql_stmt_error(stmt));
  exit(0);
}
 /* Now, execute the query */
 if (mysql_stmt_execute(stmt))
{
  fprintf(stderr, "\n mysql_stmt_execute failed");
  fprintf(stderr, "\n %s", mysql_stmt_error(stmt));
  exit(0);
}

User Comments
In the code that you have written there, you say:
(!mysql_send_long_data(...))
but it should be:
(mysql_send_long_data(...))
because mysql_send_long_data returns !=0 ONLY when there is an error.
Cheers.
Dragomir Stanchev
Add your own comment.