Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 26.8Mb
PDF (A4) - 26.9Mb
HTML Download (TGZ) - 7.1Mb
HTML Download (Zip) - 7.2Mb


23.8.11.26 mysql_stmt_send_long_data()

my_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_execute() の前に呼び出します。それを複数回呼び出して、カラムの文字の一部またはバイナリデータ値を送信できますが、これは TEXT または BLOB データ型のいずれかである必要があります。

parameter_number はデータを関連付けるパラメータを示します。パラメータは 0 から番号付けされます。data は送信されるデータを格納するバッファーへのポインタで、length はバッファー内のバイト数を示します。

注記

次の mysql_stmt_execute() 呼び出しは、最後の mysql_stmt_execute() または mysql_stmt_reset() から、mysql_stmt_send_long_data() によって使用されたすべてのパラメータのバインドバッファーを無視します。

送信されたデータをリセット/消去する場合、mysql_stmt_reset() によってそれを実行できます。セクション23.8.11.22「mysql_stmt_reset()」を参照してください。

MySQL 5.6.3 以降、max_allowed_packet システム変数は、mysql_stmt_send_long_data() によって送信できるパラメータ値の最大サイズを制御します。

戻り値

成功の場合はゼロ。エラーが発生した場合、ゼロ以外。

エラー
  • CR_INVALID_BUFFER_USE

    このパラメータは文字列またはバイナリ型は持ちません。

  • CR_COMMANDS_OUT_OF_SYNC

    コマンドが正しくない順番で実行されました。

  • CR_SERVER_GONE_ERROR

    MySQL サーバーが存在しなくなりました。

  • CR_OUT_OF_MEMORY

    メモリー不足。

  • CR_UNKNOWN_ERROR

    不明なエラーが発生しました。

次の例に、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_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);
}

User Comments
User comments in this section are, as the name implies, provided by MySQL users. The MySQL documentation team is not responsible for, nor do they endorse, any of the information provided here.
Sign Up Login You must be logged in to post a comment.