Rechercher dans le manuel MySQL
28. 7. 11. 26 mysql _stmt _send _long _data ()
bool mysql_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 (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 28.7.11.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);
}
Traduction non disponible
Le manuel MySQL n'est pas encore traduit en français sur l'infobrol. Seule la version anglaise est disponible pour l'instant.
Document créé le 26/06/2006, dernière modification le 26/10/2018
Source du document imprimé : https://www.gaudry.be/mysql-rf-mysql-stmt-send-long-data.html
L'infobrol est un site personnel dont le contenu n'engage que moi. Le texte est mis à disposition sous licence CreativeCommons(BY-NC-SA). Plus d'info sur les conditions d'utilisation et sur l'auteur.
Références
Ces références et liens indiquent des documents consultés lors de la rédaction de cette page, ou qui peuvent apporter un complément d'information, mais les auteurs de ces sources ne peuvent être tenus responsables du contenu de cette page.
L'auteur de ce site est seul responsable de la manière dont sont présentés ici les différents concepts, et des libertés qui sont prises avec les ouvrages de référence. N'oubliez pas que vous devez croiser les informations de sources multiples afin de diminuer les risques d'erreurs.