MySQL 8.0 C API Developer Guide
bool
mysql_stmt_send_long_data(MYSQL_STMT *stmt,
                          unsigned int parameter_number,
                          const char *data,
                          unsigned long length)
          Enables 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().
          
          To reset/forget the sent data, call
          mysql_stmt_reset(). See
          Section 6.4.22, “mysql_stmt_reset()”.
        
          The max_allowed_packet system
          variable controls the maximum size of parameter values that
          can be sent with
          mysql_stmt_send_long_data().
        
The parameter does not have a string or binary type.
Invalid parameter number.
Commands were executed in an improper order.
The MySQL server has gone away.
Out of memory.
An unknown error occurred.
          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 handler.
        
#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);
}