6.4.27 mysql_stmt_send_long_data()

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() 之前呼叫此函數。它可以被多次呼叫,以針對欄位傳送字元或二進制資料值的部分,該欄位必須是 TEXTBLOB 資料類型之一。

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() 傳送的參數值的最大大小。

傳回值

成功時傳回零。如果發生錯誤,則傳回非零值。

錯誤

範例

以下範例示範如何分塊傳送 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);
}