my_bool mysql_stmt_send_long_data(MYSQL_STMT *stmt,
unsigned int parameter_number, const char *data, unsigned long
length)
説明
アプリケーションがパラメータデータを一個ずつサーバ(または「chunks」)に送ることを可能にします。この機能をmysql_stmt_bind_param()
の後およびmysql_stmt_execute()
の前にこの機能を呼び出してください。それを、文字の一部またはカラムのためのバイナリーデータを送るため、複数回呼び出すことができます。それはTEXT
or
BLOB
データタイプの一種でなければなりません。
parameter_number
>はデータに添付すべきパラメータを示します。パラメータには、ゼロで始まる番号が付いています。data
は送るべきデータを含むバッファーをさすポインターで、length
はバッファー中のバイトのナンバーを示します。
注:次のmysql_stmt_execute()
コールは、最後のmysql_stmt_send_long_data()
以来、mysql_stmt_execute()
or
mysql_stmt_reset()
と一緒に使われてきたパラメータに対するバインドバッファーを無視します。
送ったデータをリセットし忘れたい場合、それをmysql_stmt_reset()
を使って実行することができます。項23.2.7.21. 「mysql_stmt_reset()
」を参照してください。
戻り値
データがうまくサーバーに送られる場合、ゼロ。エラーが起こった場合、ゼロ以外。
エラー
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); }