Spec-Zone .ru
спецификации, руководства, описания, API
|
my_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()
.
If you want to reset/forget the sent data, you can do it with mysql_stmt_reset()
. See Section
22.8.11.22, "mysql_stmt_reset()
".
As of MySQL 5.6.3, the max_allowed_packet
system variable controls the maximum size of parameter values
that can be sent with mysql_stmt_send_long_data()
.
Zero if the data is sent successfully to server. Nonzero if an error occurred.
The parameter does not have a string or binary type.
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 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);}