Documentation Home
MySQL 8.0 C API Developer Guide
Download this Manual
PDF (US Ltr) - 1.3Mb
PDF (A4) - 1.3Mb


6.4.26 mysql_stmt_send_long_data()

boolmysql_stmt_send_long_data(MYSQL_STMT *stmt,                          unsigned int parameter_number,                          const char *data,                          unsigned long length)

Description

Enables an application to send parameter data to the server in pieces (orchunks). Call this function aftermysql_stmt_bind_param() and beforemysql_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 theTEXT orBLOB 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, andlength indicates the number of bytes in the buffer.

Note

The nextmysql_stmt_execute() call ignores the bind buffer for all parameters that have been used withmysql_stmt_send_long_data() since lastmysql_stmt_execute() ormysql_stmt_reset().

To reset/forget the sent data, callmysql_stmt_reset(). SeeSection 6.4.22, “mysql_stmt_reset()”.

Themax_allowed_packet system variable controls the maximum size of parameter values that can be sent withmysql_stmt_send_long_data().

Return Values

Zero for success. Nonzero if an error occurred.

Errors

Example

The following example demonstrates how to send the data for aTEXT column in chunks. It inserts the data value'MySQL - The most popular Open Source database' into thetext_column column. Themysql 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);}