bool
mysql_stmt_send_long_data(MYSQL_STMT *stmt,
unsigned int parameter_number,
const char *data,
unsigned long length)
讓應用程式可以分塊(或稱為 「區塊」)將參數資料傳送到伺服器。在呼叫 mysql_stmt_bind_param()
或 mysql_stmt_bind_named_param()
之後,以及在呼叫 mysql_stmt_execute()
之前呼叫此函數。它可以被多次呼叫,以針對欄位傳送字元或二進制資料值的部分,該欄位必須是 TEXT
或 BLOB
資料類型之一。
parameter_number
表示要將資料與哪個參數相關聯。參數的編號從 0 開始。data
是指向包含要傳送資料的緩衝區的指標,而 length
表示緩衝區中的位元組數。
注意
下一次 mysql_stmt_execute()
呼叫會忽略所有與 mysql_stmt_send_long_data()
一起使用的參數的繫結緩衝區,因為上次呼叫 mysql_stmt_execute()
或 mysql_stmt_reset()
之後。
若要重設/忘記已傳送的資料,請呼叫 mysql_stmt_reset()
。請參閱 第 6.4.23 節,「mysql_stmt_reset()」。
max_allowed_packet
系統變數控制可以使用 mysql_stmt_send_long_data()
傳送的參數值的最大大小。
-
該參數不具有字串或二進制類型。
-
參數編號無效。
-
命令執行順序不正確。
-
MySQL 伺服器已關閉。
-
記憶體不足。
-
發生不明錯誤。
以下範例示範如何分塊傳送 TEXT
欄位的資料。它會將資料值 'MySQL - The most popular Open Source database'
插入到 text_column
欄位。mysql
變數假設為有效的連線處理常式。
#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_named_param(stmt, bind, 1, NULL))
{
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);
}